我有一个包含大量文件夹和子文件夹(封面艺术等)的音乐存档,所以我决定做一个简单的bash脚本,而不是手动删除数百个Folder.jpg,Desktop.ini和Thumb.db文件。但事情变得非常混乱。
我通过创建这样的虚拟文件夹进行了简单的测试: / home / dummy / sub1 - sub1sub1 sub1sub1sub1 sub1sub1sub2 sub2 - sub2sub1 sub2sub2 sub2sub2sub1
并在这些文件夹中复制了一些随机的.jpg,.mp3,.ini文件。我的bash脚本目前看起来像这样:
function delete_jpg_ini_db {
if [[ $f == *.jpg ]]; then
echo ".jpg file, removing $f"
gvfs-trash $f
elif [[ $f == *.ini ]]; then
echo ".ini file, removing $f"
gvfs-trash -f $f
elif [[ $f == *.db ]]; then
echo ".db file, removing $f"
gvfs-trash -f $f
else echo "not any .jpg, .ini or .db file, skipping $f"
fi
}
function iterate_dir {
for d in *; do
if [ -d $d ]; then
echo "entering sub-directory: $d" && cd $d
pwd
for f in *; do
if [ -f $f ]; then #check if .jpg, .ini or .db, if so delete
delete_jpg_ini_db
elif [ -d $f ]; then #enter sub-dir and iterate again
if [ "$(ls -A $f)" ]; then
iterate_dir
else
echo "sub-directory $f is empty!"
fi
fi
done
fi
done
}
pwd
iterate_dir
当我运行它时,它成功地遍历sub1,sub1sub1和sub1sub1sub1,但是它停在那里而不是回到home并接下来搜索sub2。
我是Bash脚本的新手,所有帮助都表示赞赏.. 感谢。
答案 0 :(得分:2)
在一个命令中,您可以运行:
find /home/dummy/sub1 -name "*.jpg" -o -name "*.ini" -o -name "*.db" -delete
如果您想查看哪些文件会被删除,请将-delete
替换为-print
(仅使用文件名)或将-ls
替换为ls -l
输出。
答案 1 :(得分:0)
这是更改后的代码......
function delete_jpg_ini_db {
if [[ $f == *.jpg ]]; then
echo ".jpg file, removing $f"
gvfs-trash $f
elif [[ $f == *.ini ]]; then
echo ".ini file, removing $f"
gvfs-trash -f $f
elif [[ $f == *.db ]]; then
echo ".db file, removing $f"
gvfs-trash -f $f
else echo "not any .jpg, .ini or .db file, skipping $f"
fi
}
function iterate_dir {
for d in *; do
if [ -d "$d" ]; then
echo "entering sub-directory: $d" && cd $d
pwd
for f in *; do
if [ -f "$f" ]; then #check if .jpg, .ini or .db, if so delete
delete_jpg_ini_db
elif [ -d $f ]; then #enter sub-dir and iterate again
if [ "$(ls -A $f)" ]; then
iterate_dir
else
echo "sub-directory $f is empty!"
fi
fi
done
cd ..
fi
done
}
pwd
iterate_dir
错误
试试吧......