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