【问题标题】:Rename multiple sequentially numbered files and change numbering format using BASH?使用 BASH 重命名多个按顺序编号的文件并更改编号格式?
【发布时间】:2011-04-16 01:30:08
【问题描述】:

我有一堆以这种格式按顺序命名的文件:imageXXX.jpg。所以它就像image001.jpg 及以后。我只想保留其中的数字部分,并去掉前面的0。因此,该文件将被命名为1.jpg。我如何使用 Bash 实现这一点?

【问题讨论】:

  • @msw,这看起来像是一个答案而不是评论。如果您将其作为答案,则可以接受或投票,以便系统知道该问题已得到回答。
  • @msw 似乎不起作用...
  • @TreyK:如果您对要帮助您的人有任何尊重,请做得比“似乎没有用”更好。 stackoverflow.com/questions/423823/…
  • @LarsH 我不会说这是一个尊重的问题,但你有一个很好的观点。它默默地失败了,我可能应该提到这一点。重命名命令已安装在服务器上。
  • @TreyK,没什么私人的......我有点得意忘形......我看到很多 q 说“它不起作用”而没有给出任何细节。

标签: image bash rename batch-processing


【解决方案1】:

纯猛击:

shopt -s extglob
for f in image*.jpg; do mv "$f" "${f/#image*(0)}"; done

附加代码可以检查名称冲突或处理其他错误情况。您可以在文件被覆盖之前使用mv -i 进行提示。

【讨论】:

  • +1:满足人们的需求。 @TreyK,这是一个技巧,重命名,它需要的命令完成下一项工作,还有很多其他工作。此外,使用的 Perl s/ubstit/ute/ 命令在 Unix 工具中随处可见;你可能会再次看到它。
【解决方案2】:

在 Linux 上,古老的 Perl 实用程序 rename 很友好:

$ rename 's/^image0+//' image*.jpg

您应该知道,去除前导零会破坏排序顺序,即*.jpg 顺序如下:

1.jpg
10.jpg
11.jpg
...
2.jpg
20.jpg

如果您想保留订单,请使用

$ rename 's/^image//' image*.jpg

改为。

为响应系统识别添加

您可以仅在 bash 中编写脚本,但这并不简单,并且确实需要正确处理失败的情况。是的,将 Perl 提升到系统上也并非易事,但它很容易,而且那个轮子已经被发明出来了

Fedora Core 8 Perl RPM:http://rpm.pbone.net/index.php3/stat/4/idpl/5152898/dir/fedora_8/com/perl-5.8.8-30.n0i.51.fc8.i386.rpm.html
CPAN 重命名:http://metacpan.org/pod/File::Rename

添加以响应静默失败

renamechmod 一样,如果你给它提供格式错误的参数,它们都会抱怨,但如果你的请求无效,两者都会保持沉默。例如

$ ls -l junk
-rw-r--r-- 1 msw msw 0 2010-09-24 01:59 junk
$ chmod 688 junk
chmod: invalid mode: '688'
$ chmod 644 junk    # was already 644 mode, nothing happened no error
$ rename 's/bob/alice/' ju*k    
# there was no 'bob' in 'junk' to substitute, no change, no error
$ ls -l junk
-rw-r--r-- 1 msw msw 0 2010-09-24 01:59 junk
$ rename 's/un/ac/' j*k  # but there is an 'un' in 'junk', change it
$ ls -l j*k
-rw-r--r-- 1 msw msw 0 2010-09-24 01:59 jack

您可以让rename 不那么沉默:

$ rename --verbose 's/ac/er/' j*k
jack renamed as jerk
$ rename --verbose 's/ac/er/' j*k   # nothing to rename
$                  

【讨论】:

  • 非常感谢您的帮助,但由于某种原因,它似乎没有重命名我们服务器上的文件。您在上面发布的命令静默失败。
猜你喜欢
  • 2019-10-07
  • 2017-08-09
  • 2018-08-20
  • 2012-12-22
  • 2018-10-02
  • 2021-11-18
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
相关资源
最近更新 更多