批量重命名文件

Int*_*man 181 shell bash rename

我有一个充满图像的目录:

image0001.png
image0002.png
image0003.png
...
Run Code Online (Sandbox Code Playgroud)

我想要一个单线将它们重命名为(比如说)。

0001.png
0002.png
0003.png
...
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Int*_*man 130

在 Debian 和衍生产品上,Perl 的rename工作方式类似于sed

  rename -v 's/image//' *.png
Run Code Online (Sandbox Code Playgroud)

另外还有renameutil-linux该作品是这样,而是:

  rename image '' *.png
Run Code Online (Sandbox Code Playgroud)

  • 你真的应该解释一下,这是一个可能必须安装的 perl 程序,它需要正则表达式作为参数。 (8认同)
  • 这个“重命名”程序来自 Perl 示例发行版。Debian 和 Ubuntu 将其作为 `/usr/bin/rename` 发布。其他 Unix 变体可能不提供它,或者可能提供完全不同的 `/usr/bin/rename`。 (5认同)
  • 某些版本的“rename”采用_from_ _to_替换模式:“rename [选项] <表达式> <替换> <文件>...” (2认同)

W_W*_*ley 124

如果您使用 Bash 或其他兼容 POSIX 的 shell:

for f in *.png; do
    mv -- "$f" "${f#image}"
done
Run Code Online (Sandbox Code Playgroud)

  • 如果您不知道如何针对不同的文件模式调整此示例,您可能需要查看指南的 [参数扩展部分](http://mywiki.wooledge.org/BashGuide/Parameters#Parameter_Expansion)上文提到的。 (3认同)
  • 这是 Mendel Coopers Advanced Bash 脚本指南 http://tldp.org/LDP/abs/html/ 中显示的参数替换方法之一 (2认同)
  • @W_Whalley 我强烈建议*避免*该指南,支持 [Wooledge Bash 指南](http://mywiki.wooledge.org/BashGuide)。 (2认同)

Gil*_*il' 56

微博

zsh shell 有一个强大的批处理重命名命令,称为zmv.

首先,您需要zmv按如下方式启用命令(这可以进入您的~/.zshrc)。

autoload zmv
Run Code Online (Sandbox Code Playgroud)

基本语法是zmv PATTERN REPLACEMENT. 该模式是一个 shell glob 表达式。部分模式可以用括号括起来。替换文本可以包含$1$2等以引用模式中的第 N 个括号组。例如:

zmv 'image(*.png)' '$1'
Run Code Online (Sandbox Code Playgroud)

您还可以让 zsh 自动定义$1$2等以匹配模式中的通配符:

zmv -w 'image*.png' '$1.png'
Run Code Online (Sandbox Code Playgroud)

  • sweeeeeeeeeeeeeeeeeeet。我应该学习 zsh 的另一个原因。 (7认同)

Mar*_*erg 44

对于这个用例,我通常使用漂亮而简单的mmv手册页)实用程序:

$ mmv "image*.png" "#1.png"
Run Code Online (Sandbox Code Playgroud)

将执行您的任务。

#1目标图案将与任何在源模式的通配符匹配被取代。这也适用于多个通配符,例如可用于更改文件名部分的顺序。您还可以轻松执行更复杂的操作,例如将小写字母转换为大写字母。

确保通过引用保护模式免受外壳的影响。

  • 不能点赞!它是如此简单和友好。适用于自制软件的 OS X。 (5认同)

X T*_*ian 12

POSIX sh for 循环

使用 sed 重命名

for i in image*jpg
do 
  mv -v "$i" "$(echo "$i" | sed -e 's/^\.\/image//' - )"
done
Run Code Online (Sandbox Code Playgroud)


Vol*_*gel 11

质量

qmv来自的命令renameutils打开一个编辑器,显示带有两个列的文件名列表,由制表符分隔。每行显示一个文件名,两列中的文件名相同。右列代表文件的新名称。
要进行更改,请编辑右侧的名称。在这个例子中,:%s/...或者视觉块模式是有帮助的。

编辑器中的文件名

$ qmv *.png
Run Code Online (Sandbox Code Playgroud)

在编辑器中:

image0001.png           image0001.png
image0002.png           image0002.png
image0003.png           image0003.png         
~                                             
~                                             
~                                             
~                                             
"/tmp/user/1000/qmvxWyVMs" 3L, 93C
Run Code Online (Sandbox Code Playgroud)

在右栏中编辑名称:(使用视觉块模式从所有行中
删除image前缀)

image0001.png           0001.png
image0002.png           0002.png
image0003.png           0003.png         
~                                             
~                                             
~                                             
~                                             
:wq
Run Code Online (Sandbox Code Playgroud)

更名日志:

image0001.png -> 0001.png
image0002.png -> 0002.png
image0003.png -> 0003.png
Run Code Online (Sandbox Code Playgroud)

(例如Ubuntu的:apt-get install renameutils


gvk*_*vkv 6

我喜欢 Perl:

perl -nlE '$old=$_; s/image//; qx(mv $old $_)'
Run Code Online (Sandbox Code Playgroud)

您还可以将相同的模式用于其他任务,例如将文件复制到另一个目录:

perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'
Run Code Online (Sandbox Code Playgroud)

  • 或者(更安全!):`rename($old,$_)` (2认同)