
具体实例:通过shell script脚本文件,把JPG文件批量导入同名文件夹
操作系统:elementary OS 0.4.1 Loki(64-bit)
SHELL:bash
今天遇到了一个小问题:有一堆积累了一段时间的照片,都是JPG格式的,文件名也已经按这样的格式「XXXXXXXX_YYYYY.jpg」完成命名了,现在需要按下划线前面的文字为文件夹名称,把下划线前面的内容相同的照片批量保存到同一个文件夹里面去。
虽然用鼠标点选,然后复制、粘贴也不是太~(长音)麻烦,但是照片实在有点多,从密密麻麻、长长短短的文件名里,一个一个看清楚什么是名字,然后再找到要放入的文件夹,操作时间久了还是有点伤眼睛的。
比如像下面这张图的时候,

于是想到用shell script文件来做批量处理。经过小小的调试,顺利完工。感到小确幸之余,就想着干脆分享上来。一则作为笔记留底,以后再遇到这样的情况就直接拿来用,也懒得再想了;二则希望能为有相同需要的同学提供一点儿微小的帮助吧。
好的,闲话少叙,言归正传。下面就奉上shell script的具体内容吧!
警告:
为了避免在通过脚本文件执行「移动」文件命令时发生异常而导致源文件消失(连回收站里也没有)的情况,建议使用「复制」文件到同名文件夹的脚本文件来处理,等正确完成复制操作之后,再手动统一删除不需要了的源文件。
shell脚本文件:copy_file_to_same_name_folder.sh
#!/bin/bash
# 同名文件与文件夹的意思是,文件名中的下划线_前面的部分相同
# 批量自动把同名文件分别放入同名文件夹中
# 处理的文件是后缀名为.jpg的文件
for i in *.jpg;do
# 从文件名中截取下划线_前面的部分,作为文件夹名称
destination_folder=${i%[_]*}
# 在命令行输出结果中显示文件夹名称——只是为了看看而已 ^_^
echo $destination_folder
# 如果已经存在这个名称的文件夹,则不再创建;
# 如果没有则创建,并创建,并在命令行输出结果中吼一声 ^_^
if [ ! -d $destination_folder ];then
mkdir ${destination_folder}
echo "the folder with the name of $destination_folder has been created."
fi
# 复制文件到同名文件夹,并在命令行输出结果中吼一声 ^_^
cp $i ./${destination_folder}/$i
echo "$i has been moved to the same name folder of $destination_folder"
done
赋予此脚本可执行权限:
sudo chmod 777 copy_file_to_same_name_folder.sh(回车)
在文件所在目录下运行此脚本:
./copy_file_to_same_name_folder.sh
鄙人也是初学者,代码不怎么讲究,写得不好还请多包涵!
以下是用类似的文件名来做演示的截图示意,文件名没有实际意义,仅供示意。
1.shell脚本运行前

2.赋予shell脚本文件可执行权限,然后运行shell脚本文件

3.shell脚本运行后

完成!

砚湖@飘香生活馆
二〇一八年十二月十九日
网友评论