【问题标题】:Rename files/folders using Mac Terminal使用 Mac 终端重命名文件/文件夹
【发布时间】:2021-07-23 04:07:48
【问题描述】:

有人可以帮助我使用 Mac 终端的命令吗?

我正在尝试像这样重命名多个文件和文件夹:

文件夹:

from: somePath/20191205 to: somePath/2019-12-05

文件:

from: somePath/20191205/20191205-Name.jpg to: somePath/2019-12-05/2019-12-05-Name.jpg

我正在尝试使用终端执行此操作,但我不知道如何使用通配符重命名。

在 DOS 中,我想应该是这样的

ren ????????*.* ????-??-??-*.*

无论如何,有人可以帮我在 Mac Terminal 中重命名这些吗?

*** 更新:

我尝试了以下操作,它确实插入了 1 个 _(或 -),但我需要插入其中 2 个并保留现有文件名的其余部分。仍在研究中,但感谢任何帮助。

感谢您的帮助!!

【问题讨论】:

  • mv somePath/20191205/20191205-Name.jpg somePath/2019-12-05/2019-12-05-Name.jpg
  • 是的,但我想对多个文件执行此操作,我无法单独执行每个文件。这就是我询问通配符或其他替代方法的原因。

标签: bash macos unix rename


【解决方案1】:

希望这会有所帮助:

$ find . -type f
./20191204/20191204.a.txt
./20191204/20191204.b.txt
./20191204/20191204.d.txt
./20191204/20191204.c.txt
./20191205/20191205.c.txt
./20191205/20191205.d.txt
./20191205/20191205.b.txt
./20191205/20191205.a.txt

$ for i in `find . -type f`; do mv $i `echo $i | sed 's/\.\/\(.*\)\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\(.*\)/\1\2-\3-\4\5/'`;done

$ find . -type f
./20191204/2019-12-04.a.txt
./20191204/2019-12-04.b.txt
./20191204/2019-12-04.d.txt
./20191204/2019-12-04.c.txt
./20191205/2019-12-05.b.txt
./20191205/2019-12-05.a.txt
./20191205/2019-12-05.d.txt
./20191205/2019-12-05.c.txt

解释:

  1. 列出文件不包含当前目录的所有属性及其子目录find . -type f
  2. 将文件移动到相同的子目录
  3. 再次列出

【讨论】:

  • 太好了,这似乎有效,非常感谢。一个问题,如果我想让它递归子目录怎么办?我可以添加 -r 吗?我试试
  • 不,mv 没有 -r 标志
  • 是的,我试过了,但我得到 mv: rename ./19980318/19980318-SMPIMG03.JPG to ./1998-03-18/19980318-SMPIMG03.JPG: No such file or directory
  • 那是因为它正在重命名目录而不是文件 - 目录与文件具有相同的命名模式。这就是问题
  • @LilMoke 再试一次,我已经更新了 MV 行。它现在适用于相同的模式目录。
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 2015-08-25
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多