【问题标题】:How to rename a list of files in directory based on creation time on mac如何根据mac上的创建时间重命名目录中的文件列表
【发布时间】:2016-11-24 17:54:12
【问题描述】:

我使用的是 Mac bash 控制台

我在谷歌上搜索了很多(甚至在堆栈溢出中)并尝试了很多脚本,以便通过 bash 命令使用其创建时间戳重命名目录中的每个文件,但都没有奏效,因为datestat 命令在 mac 中与在 linux 中不同。我也没有exif 命令。

我想用这样的格式(或类似的格式)重命名:YYYYmmDD-HHMM

有人可以帮我吗?提前非常感谢

编辑

我试过thisthisthis

编辑 2

我想用这样的格式(或类似的格式)重命名:YYYYmmDD-HHMM.jpg(jpg 是文件扩展名的一个例子,我不想丢失文件扩展名)

编辑 3

目前此命令部分有效(始终应用 jpg 扩展名)

for f in `ls`; do mv "$f" "$(stat -t %Y%m%d-%H%M $f | awk -F"\"" '{print $8}').jpg"; done

【问题讨论】:

  • 你有默认的 Mac OS X utils 还是安装了 GNU coreutils?
  • @Inian,我该如何检查?
  • 输入stat --version 并粘贴看到的输出。
  • 这里输出:$ which stat -> /usr/bin/stat
  • 运行 --version 命令

标签: bash shell date rename file-rename


【解决方案1】:
mv fileName `stat -f %SB -t %Y%m%d-%H%M fileName`

编辑

这里是最终解决方案,在整个文件列表中循环

for f in `ls`;
    do mv "$f" "`stat -f %SB -t %Y%m%d-%H%M $f`.`echo $f | cut -d '.' -f 2`";
done

【讨论】:

  • 文件扩展名丢失,如何防止?
  • 假设你的文件名是name.extension这个格式,你可以试试echo fileName | cut -d '.' -f 2
  • for f in $(ls) 本质上是错误的——参见ParsingLs。让它for f in *; do 更好。如果使用包含空格的文件名运行,还有一些缺少的引号会使此代码失败;考虑通过shellcheck.net 运行它并修复它所标识的内容。
【解决方案2】:

要在文件夹中以%Y%m%d-%H%M(例如20200722-1352)格式为创建日期添加前缀/前置每个文件,请运行以下sn-p:

for filename in *; do
  mv "$filename" "$(stat -f "%SB %N" -t "%Y%m%d-%H%M" "$filename")"
done

自定义格式/了解此命令的作用:

-f 参数在这种情况下将用作输出文件名的格式,其中%SB %N 表示:

  • 使用String 输出
  • 打印Birth 日期(创建时间)
  • 打印空格
  • 打印原始文件Name。

-t 参数扩展了日期格式本身。随意修改这些以满足您的需求。有关所有可能性,请参阅manual for stat 中的格式部分。

如果您希望删除原始文件名,只保留日期和扩展名,我们可以调整格式参数不包含文件名,并手动附加提取的扩展名${filename##*.}

for filename in *; do
  mv "$filename" "$(stat -f "%SB" -t "%Y%m%d-%H%M" "${filename}").${filename##*.}"
done

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 2013-10-25
    • 2011-12-26
    • 2012-05-21
    • 2012-09-12
    • 1970-01-01
    • 2021-07-14
    • 2012-09-06
    相关资源
    最近更新 更多