Wes*_*Wes 19 command-line rename
我有一个目录,其中包含名称如下的图像文件
image1.jpg
image2.jpg
image3.jpg
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,图像名称必须从零开始,所以image1.jpg应该是image0.jpg,image2.jpg应该是image1.jpg等等。
我可以写一个脚本来生成这样的MV命令,把它们放在一个shell脚本,然后执行他们-
mv image1.jpg image0.jpg
mv image2.jpg image1.jpg
mv image3.jpg image2.jpg
...
Run Code Online (Sandbox Code Playgroud)
但我想在 Unix 中有一种更简洁的方法来做到这一点。那是什么?
小智 22
好的旧 perl 重命名:
rename 's/(\d+)(\.jpg)/($1-1).$2/e' *
Run Code Online (Sandbox Code Playgroud)
[评论]
图像编号应大于 0。
如果图像大于 9 并且没有前导 0,请使用$(ls -v1 *)以避免破坏。由@arielf 提出并被@Graeme 注意到。
如有疑问,也可-v用于详细和-n无操作。
您可以将生成的mv命令通过管道传输到bash. 因此,您不必将它们复制到脚本中并执行该脚本。看:
command_that_generates_mv_commands | bash
Run Code Online (Sandbox Code Playgroud)
并且通过管道传输到的所有内容都将被执行bash。
您可以迭代 ls 输出,这适用于您的示例:
i=0
for file in $(ls *.jpg | sort) ; do
mv $file $(echo $file | sed 's/[0-9]*.jpg$/'${i}'.jpg/')
i=$((++i))
done
Run Code Online (Sandbox Code Playgroud)
您必须在文件的同一路径上
| 归档时间: |
|
| 查看次数: |
6960 次 |
| 最近记录: |