空のディレクトリが削除されるように正しい順序でディレクトリを削除するにはどうすればよいですか?

空のディレクトリが削除されるように正しい順序でディレクトリを削除するにはどうすればよいですか?

ファイルに任意の順序でファイルとディレクトリのリストがあり、それらを削除するスクリプトを作成したいと思います。

ディレクトリはただその子もすべて削除するには削除する必要があります。
(つまり、スクリプトを複数回実行した後に空の場合にのみ削除する必要があります。)

私はこの仕事を一度にすることを本当に好みます。
ただし、これを1パスで実行するには、正しい順序(後続の巡回)で作業を実行する必要があるようです。

私の考えでは、これが既知の問題のようです。人々は通常シェルスクリプトでこの問題をどのように解決しますか?

答え1

私の考えでは、これが既知の問題のようです。人々は通常シェルスクリプトでこの問題をどのように解決しますか?

ファイルとディレクトリのリストをsort -r

からファイルとディレクトリのリストをインポートする場合は、findこの-depthオプションを使用して後の巡回を保証することもできます。

答え2

スラッシュの数に基づいて(降順)ファイルをソートすると、ソートの問題を解決できます。

答え3

気にしません。私は自分で解決しました。

完了に使用できますawk。このソリューションはいいえファイル名に改行を許可します。

awk -- '{a=$$0;b=$$0;print(gsub("/","/",a)-sub(/\/$$/,"aaa",b),$$0)}' INPUT_FILE.txt \
    |  "$(call Q2,/usr/bin/sort)" -k1,1nr \
    |  cut -d " " -f 2-

ここでは、次を使用して重複行を削除できます。

awk -- '{pos[$$0] = NR} END { for(key in pos) reverse[pos[key]] = key; for(nr=1;nr<=NR;nr++) if(nr in reverse) print reverse[nr] }' INPUT_FILE.txt

重複排除は批判的結局、再帰的であれば、指数関数的な時間爆発を防ぐことができます。

関連情報