我尝试删除 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 ...