我对终端的东西很陌生,我只是找不到上述主题的任何答案。
在我的 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 相同