我在 QNAP nas 的单个目录中拥有数千张原始照片 ( .nef
) 和相关设置(文件名相同但扩展名相同)。.xmp
我的目标是自动创建名为yyyy-mm
or else的子目录yyyy/mm
,并相应地将所有文件移动到那里。
所有文件名都类似于yyyy-mm-dd_hhmmss-###.nef
或yyyy-mm-dd_hhmmss-###.xmp
其中###
毫秒。
答案1
如果您知道这些文件名称跨越的年份,您可以直接暴力破解它:
for year in {1996..2018}; do
for month in {01..12}; do
mkdir -p ${year}-${month}
for filetype in nef xmp; do
mv ${year}-${month}*.${filetype} ${year}-${month}/
done
done
done
答案2
以下是基于循环的解决方案,其中包含标准 QNAP 上可用的受限命令集:
#!/bin/bash
for file in ????-??-??_*.{nef,xmp}
do
yyyymm=${file/-??_*}
echo mkdir -p "$yyyymm"
echo mv -f "$file" "$yyyymm/"
done
将其放入一个文件中,例如/root/fixup
,更改到包含许多文件的目录,然后运行bash /root/fixup
。它将yyyy-mm
根据其正在处理的文件名按需创建目录。
正如所写的,它不会做任何改变。当您对它看起来能起作用感到满意时,请echo
从脚本末尾附近的两行中删除该单词。
答案3
如果您只是想按照某种模式批量创建目录,可以使用:
mkdir -p ~/{0001,0002,0003,...,XXXX}/{01,02,03,...,XX}
确保将变量替换为您实际想要使用的值,因此创建年、月和日子目录的示例如下所示:
mkdir -p ~/{1998..2018}/{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}/{01..31}
然后您可以搜索没有 31 天的月份并将其删除,如下所述这个帖子。之后,您的任务是将照片分类到正确的目录中。这与查找和删除非常相似,并在中进行了描述这个帖子。
请注意,这将在您当前的工作目录中创建子目录。正如用户 DopeGhoti 所提到的,您可以创建一个 for 循环来一次完成每个步骤。祝你好运!