私はジャーナル記事のPDFファイルでいっぱいのディレクトリを持っており、ほとんどはBibtexキーと命名されました。しばらく前に外付けハードドライブにバックアップしていましたが、最新のままではなく、名前の異なる重複ファイルが非常に多かったです。両方のディレクトリを再同期し、重複ファイルを削除したいと思います。
fdupesを使用してそれらのいくつかを識別し、今では素晴らしいペアのリストを持っています。ただし、外部ドライブのほとんどのレプリカには意味のない名前があります。多すぎて削除して再コピーするのではなく、最初のディレクトリの重複エントリと同じように名前を変更したいと思います。だから私はrsyncを使用したくありません。
たとえば、fdupes 出力が次のような場合:
/home/articles/bibtex.pdf
/external/articles/morearticles44.pdf
書くより速い方法がありますか?
mv /external/articles/morearticles44.pdf /external/articles/bibtex.pdf
各レプリカペアについて?
答え1
私の経験では、fdupes
ファイルを出力する順序が一貫していない可能性があります(--delete
このオプションには自分自身の問題がありました)。これは、ファイルが特定の順序である必要がないため、非常に強力です(他のフォルダに常に2つの重複ファイルがある限り)。
# note no trailing slash
source_dir=/home/articles
target_dir=/external/articles
fdupes "$target_dir" "$source_dir" |
while IFS= read file; do
case "$file" in
"$source_dir/"*)
source=${file##*/}
;;
"$target_dir/"*)
target=$file
;;
'')
if [ "$source" ] && [ "$target" ]; then
echo mv -i "$target" "$target_dir/$source"
fi
unset source target
;;
esac
done
その後、コマンドが印刷され、必要なものがわかったら削除されますmv
。echo
また、上書き内容がある場合は、-i
オプションでメッセージを表示します。mv
答え2
私は別のワークフローを提案したいです(ハッセンジが提案した):使用する代わりにfdupes
使用できます。調和重複を識別して処理します。
リモートルートの1つを使用してUnisonを実行する必要があります。それ以外の場合、同じファイルを検出できません。だから走る
unison /home/articles/bibtex.pdf ssh://localhost/external/articles
Unisonはしばらく振り回して、2つのツリーを同期させることを提案します。同期した>
移動/external/articles/morearticles44.pdf
方向を選択します/external/articles/bibtex.pdf
。