【问题标题】:Quick way to modify to multiple filenames in Linux在 Linux 中修改多个文件名的快速方法
【发布时间】:2013-12-04 18:45:22
【问题描述】:

我有文件:

1.pgm ... 400.pgm 从 1 到 400 的连续数字都采用相同的格式。

我想把它们复制到:

401.pgm ... 800.pgm,基本上是因为我需要更多的输入数据

我想知道在 Linux 中是否有任何快速的方法可以做到这一点?

【问题讨论】:

标签: linux command-line filenames


【解决方案1】:

如果您的文件具有这种结构,那么只需:

for file in *.pgm ; do
   num=${file%%.pgm}
   newnum=$(( $num + 400 ))  #more portable than 'let', thx to @user2719058 for the reminder!
   echo mv "${file}" "${newnum}.pgm"
done

一旦您确信这可以满足您的需求,请取出 echo...

【讨论】:

  • 请注意,let 是特定于 bash 的。
  • @user2719058 谢谢,我认为它比 $((...)) 更便携,结果恰恰相反!真的很感谢。
  • @user2719058:实际上,它不是特定于 bash 的......无论如何我都会提供两种方式。
  • 嗯,AFAIK let 源于 korn shell,bash 和 zsh 支持它。因此,它不是严格特定于 bash 的,但你不能指望它出现在 shell 中。
【解决方案2】:

rename(1):

rename 's/(\d+)/400+$1/e' *.pgm

不过,这是一个单独的程序。纯 bash 中稍微不那么优雅的方式是

for f in *.pgm; do mv $f $((400+${f//[!0-9]/})).pgm; done

【讨论】:

    猜你喜欢
    • 2011-08-19
    • 1970-01-01
    • 2010-11-02
    • 2011-03-18
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多