2つの異なるディレクトリ間の共通サブディレクトリ名を識別して削除します。

2つの異なるディレクトリ間の共通サブディレクトリ名を識別して削除します。

数百のサブディレクトリを持つ2つのディレクトリがありますdir1。私は共有されているサブディレクトリ名に関する情報を必要とし、その名前を体系的に削除する必要があります。ファイルやファイルの内容を比較する必要はありません。パフォーマンスdir2depth 1dir1dir2dir2

diff -qr dir_one dir_two | sort

また、現在は興味のないファイル名も生成します。

ベストアンサー1

あなたのユースケースに応じて避けることができます確認するパブリックディレクトリはrm -rf存在しないディレクトリは無視されるからです。

それではそれで十分です。find みんなディレクトリdir1から削除します dir2

find dir1 -mindepth 1 -maxdepth 1 -type d -printf "dir2/%f\0" |xargs -0 rm -rf --

いくつかの説明。デフォルトでは、findすべてのディレクトリはフルパスで印刷されますdir1。したがって、-printf削除する先行ディレクトリ(%f)と追加のパス"dir2"なしでファイル名のみを印刷します。また、xargオプションを使用するために文字列を終了するために改行の代わりにヌルバイト "\ 0"を使用します。-0これは、空白のあるファイル名に対してこれらすべてを安全にします。次に、標準入力をxargs読み取りrm、すべての文字列を引数として追加してコマンドを実行します。

echo実際に削除する前に、印刷専用コマンドを追加してコマンドラインをテストできますrm

find dir1 -mindepth 1 -maxdepth 1 -type d -printf "dir2/%f\0" |xargs -0 echo rm -rf --

ただリストls代わりに、通常のディレクトリを使用できますrm(存在しないディレクトリを無視するには、2> / dev / nullを追加)。

find dir1 -mindepth 1 -maxdepth 1 -type d -printf "dir2/%f\0" |xargs -0 -r ls -d -- 2>/dev/null

おすすめ記事