Synology NAS(DS415 +)の空のディレクトリを削除しようとしています。
私は試した:
find . -type d | xargs rmdir
しかし、問題は、「hello(2012)」のような名前にスペースが含まれるディレクトリがあることです。また、引数「-empty」はSynologyカーネルではサポートされていません。
あなたはなにか考えはありますか?
誤解している可能性がありますが、[〜#〜] posix [〜#〜]シェルで作業しているようです。
awk
(gawk
)でそれを行うことができます。空の各ディレクトリにデフォルトで2つのファイル(_.
_と_..
_)しか含まれていない限り、フォルダの空の条件として[ $(wc -l <<< $(ls -as $DIR)) -ne 2 ]
を使用できます。
_$ find . -type d | awk '{print "[ $(wc -l <<< $(ls -a \"" $i "\")) -eq 2 ] && rm -rf \"" $0 "\""}'
_
これは私がテストしたディレクトリから得た出力です:
_[ $(wc -l <<< $(ls -a ".")) -eq 2 ] && rm -rf "."
[ $(wc -l <<< $(ls -a "./skda askd ()")) -eq 2 ] && rm -rf "./skda askd ()"
[ $(wc -l <<< $(ls -a "./skda askd () 2")) -eq 2 ] && rm -rf "./skda askd () 2"
_
今、あなたがしなければならないのは、これらのコマンドをインタプリタにパイプすることだけです。私のテストディレクトリでは、これはきれいに機能しました。
xargs(1)
スペースではなく、改行で分割されます。
名前に改行が含まれるディレクトリがない限り、これは機能します。
find . -type d -exec rmdir {} +
=> rmdir ./dir1 ./dir1/subdir1 ./dir1/subdir2 ./dir2 ...
しかし、子の前に親を削除します...代わりに、次のようにします。
find . -depth -type d -exec rmdir {} +
=> rmdir ./dir1/subdir1 ./dir1/subdir2 ./dir1 ./dir2 ...