【发布时间】:2013-12-04 18:45:22
【问题描述】:
我有文件:
1.pgm ... 400.pgm 从 1 到 400 的连续数字都采用相同的格式。
我想把它们复制到:
401.pgm ... 800.pgm,基本上是因为我需要更多的输入数据
我想知道在 Linux 中是否有任何快速的方法可以做到这一点?
【问题讨论】:
-
一个简单的shell script 就足够了
标签: linux command-line filenames
我有文件:
1.pgm ... 400.pgm 从 1 到 400 的连续数字都采用相同的格式。
我想把它们复制到:
401.pgm ... 800.pgm,基本上是因为我需要更多的输入数据
我想知道在 Linux 中是否有任何快速的方法可以做到这一点?
【问题讨论】:
标签: linux command-line filenames
如果您的文件具有这种结构,那么只需:
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 的。
let 源于 korn shell,bash 和 zsh 支持它。因此,它不是严格特定于 bash 的,但你不能指望它出现在 shell 中。
与rename(1):
rename 's/(\d+)/400+$1/e' *.pgm
不过,这是一个单独的程序。纯 bash 中稍微不那么优雅的方式是
for f in *.pgm; do mv $f $((400+${f//[!0-9]/})).pgm; done
【讨论】: