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)
另外还有rename从util-linux该作品是这样,而是:
rename image '' *.png
Run Code Online (Sandbox Code Playgroud)
W_W*_*ley 124
如果您使用 Bash 或其他兼容 POSIX 的 shell:
for f in *.png; do
mv -- "$f" "${f#image}"
done
Run Code Online (Sandbox Code Playgroud)
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)
Mar*_*erg 44
对于这个用例,我通常使用漂亮而简单的mmv(手册页)实用程序:
$ mmv "image*.png" "#1.png"
Run Code Online (Sandbox Code Playgroud)
将执行您的任务。
的#1目标图案将与任何在源模式的通配符匹配被取代。这也适用于多个通配符,例如可用于更改文件名部分的顺序。您还可以轻松执行更复杂的操作,例如将小写字母转换为大写字母。
确保通过引用保护模式免受外壳的影响。
X T*_*ian 12
使用 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)
我喜欢 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)
| 归档时间: |
|
| 查看次数: |
204277 次 |
| 最近记录: |