删除空目录 Synology NAS Shell

删除空目录 Synology NAS Shell

我尝试删除 Synology NAS(DS415+)上的空目录。

我试过:

find . -type d | xargs rmdir

但问题是,我的目录名称中有空格,如“hello (2012)”。而且 Synology 内核不支持参数“-empty”。

你有什么想法?

答案1

我可能误解了你的意思,但你似乎正在与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"

现在您要做的就是将这些命令传送到您的解释器。在我的测试目录中,这运行得很顺利。

答案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 ...

相关内容