条件付きで重複ファイルを削除する

条件付きで重複ファイルを削除する

ファイルが同じ名前を共有している場合にのみ重複エントリを削除したいと思います。
例:rdfind -deleteduplicates true ~/folder私の目標は達成されません。

1つのアイデアは、rdfindテスト実行の出力(results.txt)を取得することです。

rdfind -n true "$PWD"

次に、識別された各グループの最初のファイルと同じ名前のファイルを確認します。DUPTYPE_FIRST_OCCURRENCE XXXX

DUPTYPE_FIRST_OCCURRENCE 5148 2 37934240 2054 16916792 1 /home/fig3.tif
DUPTYPE_WITHIN_SAME_TREE -5148 3 37934240 2054 17044654 1 /home/other/fig3.tif
DUPTYPE_WITHIN_SAME_TREE -5148 3 35435435 2054 16546546 1 /home/other2/fig3.tif

DUPTYPE_FIRST_OCCURRENCE 5160 2 116397930 2054 16916804 1 /home/file.psd
DUPTYPE_WITHIN_SAME_TREE -5160 2 116397930 2054 16916870 1 /home/folder/file.psd
DUPTYPE_WITHIN_SAME_TREE -5160 2 116397930 2054 17654654 1 /home/folder/file2.psd

上記の例では、最初のグループの場合は2つの重複エントリを削除し、2番目のグループでは最初のエントリと同じ名前の重複エントリを1つだけ削除する必要があります(file.psd)。

編集:rmlintの答えが望ましいです。 「生」ファイルは通常、次のように生成できます。リント

ベストアンサー1

results.txtrdfindこのスクリプトは、質問に示すように生成されたファイルを後処理します。

#!/bin/bash
#
while read -r type x x x x x x path
do
    case "$type" in

        DUPTYPE_FIRST_OCCURRENCE)
            name="${path##*/}"
            echo "New path for $name" >&2
            ;;

        DUPTYPE_WITHIN_SAME_TREE|DUPTYPE_OUTSIDE_TREE)
            if [[ -n "$name" ]] && [[ ${path##*/} == $name ]]
            then
                echo "Remove duplicate $path" >&2
                # rm -f "$path"
            else
                echo "Skipping differently named $path" >&2
            fi
            ;;
    esac
done

rmタスクを実行する準備ができたら、コメントを外します。echoステートメントをコメントアウトまたはリダイレクトします。標準エラー) 冗長な内容を望まない場合。

read -r type x x x x x x pathループの上部のステートメントは、スペースで区切られた8つのフィールドを読み取ります。中央の6つは関係がないため、ガベージ変数として読み込み、合計のみを使用し$typeます$path

生産するresults.txt

rdfind -dryrun true -makeresultsfile true {directory...}

生成されたファイルの後処理(rddedup上記のマイスクリプト)

rddedup < results.txt

おすすめ記事