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