0

ファイルシステムのまったく異なる場所に 2 つのディレクトリがあります: /path1/dir1/* /path2/dir2/*

dir1 にはサブディレクトリのリストがあり、dir2 には同様のサブディレクトリのリストがあり、そのうちのいくつかは dir1 にもあります

現在dir1にあるサブディレクトリのリストを使用できるコマンドが欲しいのですが、それらがdir2に存在する場合は削除します。

find コマンドを使用してサブディレクトリ名のリストを出力し、次のように一緒に sed することができました。

$PWD を見つける -maxdepth 1 -タイプ d | sed -e 's\^/path1/dir1///g' と出力されます: subdir1 subdir2 subdir3

しかし、それを別の場所から(再帰的に)それらのサブディレクトリを削除するコマンドにフィードする方法がわかりません。awk や xargs などを使用する必要がありますか?

4

3 に答える 3

2

次のようなものが必要なようです。

cd /path1/dir1; find . -type d -maxdepth 1 -mindepth 1 -exec rm -rf /path2/dir2/{} \;

「rm-rf」を「echo」に置き換えて、試す前に削除するディレクトリを確認してください:-)

「-f」オプションは、ディレクトリが存在しない場合のエラーを防ぎます

findの一部のバージョン(GNU?)にも「-execdir」があります。次のように使用できます。

find /path1/dir -type d -maxdepth 1 -mindepth 1 -execdir rm -rf /path2/dir2/{} \;
于 2012-07-03T20:46:55.447 に答える
0

find を使用してディレクトリを見つけ、awk にパイプすることもできます。

find /path1/dir1/ -maxdepth 1 -mindepth 1 -type d |awk 'BEGIN{FS="/"}{system("echo rm -rf /path2/dir2/"$NF);}'

コマンドが正しく動作していることを確認したら、system() 呼び出しの「echo」を削除します。

于 2012-07-05T02:03:43.790 に答える
0
for dir in path1/dir1/*/
do
    rm -rf path2/dir2/"$(basename dir)"
done
于 2012-07-04T00:23:20.467 に答える