2つのディレクトリから重複ファイルを削除する

2つのディレクトリから重複ファイルを削除する

デフォルトでは、同じ内容のファイルを含む2つのフォルダ(サブフォルダを含む)があります。

例:

  • /folder/files/data/new
  • /folder/files/data/old

/oldにすでに存在する/newのすべてのファイルを削除する方法はありますか?厳密なファイル名(変更されていない日付)重複ファイルの再読み込みを防ぎます。

ベストアンサー1

以下のコードは、oldディレクトリだけでなくそのサブディレクトリも検索し、newディレクトリから同じ名前とパスを持つファイルを削除します。これはすべての悪意のあるファイル名(スペース、改行など)に適用されます。

cd /folder/files/data/old || { echo "Failed to get in correct directory" ; exit 1 ; }
find . -type f -exec rm -f ../new/{} \;

このパラメータは、ディレクトリではなくファイルを検索するように指示-type fします。findこの-exec ... \;パラメーターは、ファイルが見つかった場合は、findサブディレクトリー内の対応するファイルでoldコマンドを実行する必要があることを示します。rm -fnew

rmこのオプションが与えられるので、-f存在しないファイルは自動的に無視されます。これにより、newファイルを削除する前にファイルが存在するかどうかをテストする必要がなくなります。また、ファイルを削除する前にメッセージは表示されません。これは、大量のファイルを削除する場合に非常に便利です。しかし、このスクリプトを実行する前に、そのファイルを本当に削除することを確認してください。。保護のためにcdコマンドが失敗すると、スクリプトはエラーで終了します。

おすすめ記事