如何将 mv 文件批处理到按修改日期创建和命名的文件夹?

如何将 mv 文件批处理到按修改日期创建和命名的文件夹?

我对终端的东西很陌生,我只是找不到上述主题的任何答案。

在我的 OS X 上,我有一个包含大约 4000 张照片的文件夹,我想将其移动到根据文件的修改日期(而不是创建日期)命名的文件夹中。我如何使用终端来完成此操作?

答案1

perl

perl -MPOSIX -le 'for (<*.jpg>) {
  $d=strftime"%Y-%m-%d",localtime((stat$_)[9]);
  mkdir$d;rename$_,"$d/$_" or warn "rename $_: $!\n"}'

zsh

zmodload zsh/stat
for f (*.jpg) {stat -F %F -A d +mtime -- $f && mkdir -p $d && mv -- $f $d}

答案2

与 OSX统计数据:

for file in *; do
    dir="$(stat -t %Y%m%d%H%M%S -f %Sm -- "$file")"
    mkdir -p "$dir"
    mv -- "$file" "$dir/$file"
done

使用 GNU stat(即在 Linux 或 Cygwin 上):

for file in *; do
    dir="$(stat -c %Y -- "$file")"
    mkdir -p "$dir"
    mv -- "$file" "$dir/$file"
done

这会将每个文件移动到以其 mtime(作为纪元)命名的目录中。

如果您想要更细粒度地控制目录的外观,可以使用 GNU date 来重新格式化它,方法是将赋值行更改为如下所示:

dir="$(date -d @"$(stat -c %Y -- "$file")" +%F)"

请参阅 参考资料,了解man date有关您可以使用的日期格式规范的信息。在这种情况下,%F是:

%F 完整日期;与 %Y-%m-%d 相同

相关内容