私はこのコマンドを使ってディレクトリから無駄なファイルを削除する簡単なスクリプトを書いていますfind
。
スクリプトに行を追加してディレクトリを平坦化できるかどうかを知りたいのですが、できません。完全壊れた。
たとえば、次のような大きなディレクトリがあるとしますcleantarget
。
- 清掃対象
- フォルダA
- フォルダA1
- フォルダA2
- フォルダB
- フォルダB1
- フォルダB11
- フォルダB1
- フォルダA
最終結果は次のとおりです。
- 清掃対象
- フォルダA
- フォルダB
私は結果が次のようにしたくありません。
- 清掃対象
- 私のすべてのファイル
ディレクトリには16000個のファイルがあるため、ディレクトリが複雑になったときに時々実行できるようにスクリプトを使用するのが最善です。
どうすればいいですか?
編集:本質的にこれは次のことを意味します。指定されたターゲットディレクトリ内の各サブディレクトリを個別に平坦化するスクリプトが必要です。つまり、フォルダAを平面化し、フォルダBを平面化し、フォルダCを平面化する方法で、その中のすべてのディレクトリがcleanfolder
平面化されるまで続きます。
答え1
次の行が機能するはずです。
find "/path/to/cleantarget" -maxdepth 1 -mindepth 1 -type d | while read line; do
find "${line}" -mindepth 2 -type f -exec mv -t "${line}" -i '{}' +
rm -r "${line}"/*/
done
これにより、フォルダAとフォルダBがマージされ、重複したアイテムを上書きするように求められ、フォルダが削除されます。