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