我有以下脚本来递归清理目录,当它们不再包含(任何目录)任何.mp3或.ogg文件时:
set -u
find -L $1 -depth -type d | while read dir
do
songList=`find -L "$dir" -type f \( -iname '*.ogg' -o -iname '*.mp3' \)` && {
if [[ -z "$songList" ]]
then
echo removing "$dir"
rm -rf "$dir"
fi
}
done
Run Code Online (Sandbox Code Playgroud)
这种方法很有效,除非在目录中有空格作为其名称的最后一个字符的情况下find失败,在这种情况下第二个失败,如果调用脚本,则返回以下反馈.作为唯一的参数,以及具有路径的目录'./FOO/BAR BAZ '(注意末尾的空格)存在:
find: `./FOO/BAR BAZ': No such file or directory
Run Code Online (Sandbox Code Playgroud)
(注意最后遗漏的空间,但其他空格保持不变.)
我很确定这是一个引用的东西,但我试过的其他引用方式会使行为变得更糟(即更多目录失败).
bash ×1