次のようないくつかのディレクトリがあります。
Rep1/foo/bar/files
Rep2/foo/otter/files
Rep3/foo/bar/files
...
私が望むのは、サブディレクトリ* / bar /がないディレクトリの名前で、おそらく削除することもできます。どうすればいいですか?
ベストアンサー1
次のスクリプトを使用できますfind
for topdir in ./*/; do
[ -z "$(find "$topdir" -type d -name bar -print -quit)" ] &&
echo "$topdir"
done
この部分は、単に-print -quit
サブディレクトリを見つけて終了するように最適化したものです。あなたのバージョンがそれをサポートしていないbar/
場合は、このセクションを削除できます。コマンドは引き続き機能しますが、少し遅くなることがあります。find
-quit
または、この純粋なbash
スクリプト
shopt -s globstar
for topdir in ./*/; do
(cd "$topdir" && compgen -G '**/bar/' > /dev/null) ||
echo "$topdir"
done
結果がうまくいったら、ディレクトリを削除echo "$topdir"
に置き換えてくださいrm -r "$topdir"
。
どちらの方法でも任意のファイル/ディレクトリ名を処理でき、改行や特殊記号を含む名前も処理できます*
。