Bash脚本检查具有特定扩展名的文件
我正在尝试构建一个.sh脚本来帮助我清除一个巨大的库文件夹。这是我第一次使用bash脚本,但它运行得不太正常 文件夹结构为:Bash脚本检查具有特定扩展名的文件,bash,shell,Bash,Shell,我正在尝试构建一个.sh脚本来帮助我清除一个巨大的库文件夹。这是我第一次使用bash脚本,但它运行得不太正常 文件夹结构为: gallery/ gallery1/ dynamic/ thumbs/ oldfile.jpg_backup oldfile.jpg gallery2/ dynamic/ thumbs/ oldfile.jpg_backup ol
gallery/
gallery1/
dynamic/
thumbs/
oldfile.jpg_backup
oldfile.jpg
gallery2/
dynamic/
thumbs/
oldfile.jpg_backup
oldfile.jpg
。。等等
这就是它的工作原理:
for f in ~/gallery/*;
do
[ -d /thumbs ] && rm -r thumbs/ && echo Thumbs deleted...
[ -d /dynamic ] && rm -r dynamic/ && echo Dynamic deleted...
if [ DIRECTORY == "*.jpg_backup" ]
then
rm *.jpg
rename 's/.jpg_backup/.jpg/' *
fi
done;
#/usr/bin/env bash
set-o errexit
set-o xtrace
对于画廊中的d/*;做
rm-vrf“$d/拇指”“$d/动态”
if[-n“$(shopt-s nullglob;echo$d/*.jpg_备份)”];然后
rm-rf“$d”/*.jpg
对于“$d”/*.jpg_备份中的f;做
mv-v“$f”“${f%\u backup}”
完成
fi
完成
参考资料:
- nullglob:
- 在bash中剥离后缀(jpg_backup->jpg):
$f
变量来处理每次迭代中的文件和子目录
for f in ~/gallery/*;
do
[ -d "$f/thumbs" ] && rm -r "$f/thumbs" && echo "$f/dynamic" deleted...
[ -d "$f/dynamic" ] && rm -r "$f/dynamic" && echo "$f/dynamic" deleted...
if compgen -G "$f/*.jpg_backup" >/dev/null
then
rm "$f"/*.jpg
rename 's/.jpg_backup/.jpg/' "$f"/*.jpg_backup
fi
done;
我在中找到了compgen
命令
但所有这些循环似乎都没有必要。您只需执行以下操作:
rm -rf ~/gallery/*/{thumbs,dynamic}
rename -f 's/.jpg_backup/.jpg/' ~/gallery/*/*.jpg_backup
重命名的-f
选项告诉它允许替换现有文件,因此不需要使用rm
命令。Cool nice脚本。但在该脚本中没有cd$f
。如果[DIRECTORY==“*.jpg\u backup”]
行应该做什么?它应该执行步骤4
?有帮助吗<代码>如果ls“$f”/*.jpg_backup>/dev/null 2>/dev/null?[-d/thumbs
检查/
dire中的thumbs
目录和rm-r thumbs/
删除当前工作目录中的thumbs目录,这些都不相关…非常感谢,但出于某些原因,它没有执行任何操作,甚至没有输出错误..将设置-x
放在脚本开头以查看thumbs目录的跟踪e执行。