Wag*_*ags 5 scripting shell-script date
我一直在使用以下脚本将我的照片组织到“日期”目录中:
for x in *.JPG; do
d=$(date -r "$x" +%Y-%m-%d)
mkdir -p "$d"
mv -- "$x" "$d/"
done
Run Code Online (Sandbox Code Playgroud)
这个脚本很好用。我的照片文件遵循相同的命名约定“IMG_20131125_090000.JPG”,即拍摄日期和时间。有没有办法更改上面的脚本,以便它仍然分类到日期目录中,但使用文件名中的日期而不是使用文件的修改日期?
答案已修复为 2013-11-25 而不是 20131125
如果您的脚本使用bash兼容的 shell 运行,最简单的解决方案是替换
d=$(date -r "$x" +%Y-%m-%d)
Run Code Online (Sandbox Code Playgroud)
和
d="${x:4:4}-${x:8:2}-${x:10:2}"
Run Code Online (Sandbox Code Playgroud)
带有 expr 的便携式解决方案:
d=$(expr substr "$x" 5 4)-$(expr substr "$x" 9 2)-$(expr substr "$x" 11 2)
Run Code Online (Sandbox Code Playgroud)
如果您只需要 20131125 而不是 2013-11-25 作为目录名称,您也可以
sed解决方案:
d=$(echo "$x" | sed 's/.*_\([0-9]*\)_.*/\1/')
Run Code Online (Sandbox Code Playgroud)
这些sed命令将文件名替换为下划线之间的数字(=日期)。
使用awk解决方案:
d=$(echo "$x" | awk -F _ '{print $2}')
Run Code Online (Sandbox Code Playgroud)
剪切解决方案:
d=$(echo "$x" | cut -d_ -f 2')
Run Code Online (Sandbox Code Playgroud)