将文件移至以文件名前 6 位数字命名的目录

将文件移至以文件名前 6 位数字命名的目录

我在 QNAP nas 的单个目录中拥有数千张原始照片 ( .nef) 和相关设置(文件名相同但扩展名相同)。.xmp我的目标是自动创建名为yyyy-mmor else的子目录yyyy/mm,并相应地将所有文件移动到那里。
所有文件名都类似于yyyy-mm-dd_hhmmss-###.nefyyyy-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 循环来一次完成每个步骤。祝你好运!

相关内容