我在 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 元数据中的时间戳),例如FileInodeChangeDate
、 FileAccessDate
、ModifyDate
、DateTimeOriginal
、CreateDate
。