ファイルが同じ名前を共有している場合にのみ重複エントリを削除したいと思います。
例: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.txt
rdfind
このスクリプトは、質問に示すように生成されたファイルを後処理します。
#!/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