別のディレクトリで重複フ​​ァイル(fdupesで識別される)の名前を変更するより速い方法は何ですか?

別のディレクトリで重複フ​​ァイル(fdupesで識別される)の名前を変更するより速い方法は何ですか?

私はジャーナル記事の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

その後、コマンドが印刷され、必要なものがわかったら削除されますmvechoまた、上書き内容がある場合は、-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

関連情報