如何根据文件日期将(图像)文件移动到其他目录

如何根据文件日期将(图像)文件移动到其他目录

我在 CentOS/cPanel 服务器上有一个包含 24000 个图像的目录 (currdir)。

我想通过根据图像日期将图像从该目录移动到其他目录(或 currdir 内的子目录)来分割该目录。

如何实现?

答案1

这将运行一个find命令,该命令输出一个 shell 命令,根据文件的上次更改时间移动目录中的文件。它将动态地在目录上创建目标(mkdir -p如果目录已存在,则不会失败)。然后生成的命令直接通过管道传输到 shell 解释器中。

find . -maxdepth 1 -type f -printf "mkdir -p %CY/%Cm/%Cd && mv -- '%f' %CY/%Cm/%Cd\n" | sh

(假设 GNUfind作为其-printf谓词)。

替换为上次修改时间(通常更准确地表示该文件的年龄%C%T内容文件的元数据被修改时,更改时间也会更新)。

请注意,这可能不是最有效的方法,因为它将创建许多进程来创建目录和移动文件。由于这是一次执行,我不会太关注这一点......

它假设文件名不包含'字符(如果不能保证,则构成命令注入漏洞)。

您可以将-x选项(或-o xtrace)传递sh给它,以显示它正在做什么,或者-e(或-o errexit)让它在第一个错误时退出(尽管使用-e,您希望将 替换&&;,否则失败mkdir将被忽略) 。

答案2

exiftool

exiftool -ext jpg '-Directory<FileModifyDate' -d %Y/%m/%d .

会将当前工作目录中带有扩展名的文件移动jpg到基​​于FileModifyDate.

exiftool -args file.jpg将显示与您可以使用的文件相关的其他时间戳FileModifyDate(包括相机在 JPEG 文件中存储的 EXIF 元数据中的时间戳),例如FileInodeChangeDateFileAccessDateModifyDateDateTimeOriginalCreateDate

相关内容