ジャーナル記事のPDFファイルでいっぱいのディレクトリがあります。そのほとんどはbibtexキーで名前が付けられています。少し前に外付けハードドライブにバックアップを作成しましたが、最新の状態に保たれておらず、異なる名前の重複がたくさんあります。 2つのディレクトリを同期に戻し、余分なファイルを削除したいと思います。
Fdupesを使用して、これらの束を識別しました。これで、それらのペアのリストができました。ただし、外付けドライブの重複のほとんどには意味のない名前が付いています。それらの数が非常に多いため、削除して再度コピーするのではなく、最初のディレクトリの複製と同じ名前に変更したいと思います。だから私はrsyncだけを使いたくありません。
たとえば、fdupesの出力が次の場合:
/home/articles/bibtex.pdf
/external/articles/morearticles44.pdf
書くよりも速い方法はありますか
mv /external/articles/morearticles44.pdf /external/articles/bibtex.pdf
重複の各ペアに対して?
私の経験では、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
が削除されます。また、mv
の-i
オプションは、何かを上書きするかどうかを確認するメッセージを表示します。
別のワークフローを提案します( hasenjが提案 ):fdupes
を使用して重複ファイルを識別し、後処理を実行してそれらを削除する代わりに、 nison 重複を識別して処理します。
ルートリモートの1つでUnisonを実行する必要があります。そうしないと、同一のファイルが検出されません。だから実行
unison /home/articles/bibtex.pdf ssh://localhost/external/articles
ユニゾンはしばらくの間解約し、2つのツリーを同期することを提案します。 >
方向に同期して/external/articles/morearticles44.pdf
を/external/articles/bibtex.pdf
に移動することを選択します。