特定のサブディレクトリを含まないディレクトリ名を探す

特定のサブディレクトリを含まないディレクトリ名を探す

次のようないくつかのディレクトリがあります。

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"

どちらの方法でも任意のファイル/ディレクトリ名を処理でき、改行や特殊記号を含む名前も処理できます*

おすすめ記事