创建子目录并按日期组织文件

创建子目录并按日期组织文件

我有一些从安全摄像头复制的文件目录,我想按文件日期将它们组织到子目录中。例如;

-rwxrwxrwx 0 root root 4935241 Jul 19  2012 DSCN1406.JPG
-rwxrwxrwx 0 root root 4232069 Jul 19  2012 DSCN1407.JPG
-rwxrwxrwx 0 root root 5015956 Jul 20  2012 DSCN1408.JPG
-rwxrwxrwx 0 root root 5254877 Jul 21  2012 DSCN1409.JPG

我想要一个运行的脚本来查看该目录中的文件,然后创建 3 个所需的目录,名称如下:

drwxrwxrwx 1 root root     0 Sep  2 16:49 07-19-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-20-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-21-2012

然后将文件移动到适当的目录中。有谁对实现此目标的良好脚本化方法有任何建议吗?

答案1

在 Linux 和 Cygwin 上,您可以使用date -r读取文件的修改日期。

for x in *.JPG; do
  d=$(date -r "$x" +%Y-%m-%d)
  mkdir -p "$d"
  mv -- "$x" "$d/"
done

(我使用明确、标准且易于排序的 YYYY-MM-DD 日期格式。)

答案2

这还检查要组织的对象是否是文件。这是一项重要的检查,如果失败,日期的目录本身可能会移动到另一个日期。实际上,这使得答案更加幂等,允许多次运行。

dir="mention the directory path"
cd "$dir"

for x in *; do
    if [ -f "$x" ]; then
        d=$(date -r "$x" +%Y/%B/%d)
        mkdir -pv "$d"
        mv -v -- "$x" "$d/"
    fi
done

相关内容