web-dev-qa-db-ja.com

空のディレクトリを削除するSynology NASシェル

Synology NAS(DS415 +)の空のディレクトリを削除しようとしています。

私は試した:

find . -type d | xargs rmdir

しかし、問題は、「hello(2012)」のような名前にスペースが含まれるディレクトリがあることです。また、引数「-empty」はSynologyカーネルではサポートされていません。

あなたはなにか考えはありますか?

3
Beni

誤解している可能性がありますが、[〜#〜] posix [〜#〜]シェルで作業しているようです。

awkgawk)でそれを行うことができます。空の各ディレクトリにデフォルトで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"
_

今、あなたがしなければならないのは、これらのコマンドをインタプリタにパイプすることだけです。私のテストディレクトリでは、これはきれいに機能しました。

1
theoden8

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 ...
2