2013-12-04 3 views
2

У меня есть файлы:Быстрый способ изменить для нескольких имен файлов в Linux

1.pgm ... 400.pgm порядковые номера от 1 до 400 все в том же формате.

Я хочу, чтобы скопировать их в:

401.pgm ... 800.pgm, это basicaly, потому что мне нужно больше входных данных

Я задаюсь вопросом, есть ли быстрый способ сделать это в Linux?

+0

простой [сценарий оболочки] (http://freeos.com/guides/lsst/) должно быть достаточно –

ответ

4

Если файл имеет такую ​​структуру, то просто:

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, как только вы уверены, что это делает то, что вы хотите ...

+0

Обратите внимание, что 'let' является Баш-специфичны. – user2719058

+0

@ user2719058 спасибо, я думал, что он более портативный, чем $ ((...)), и получается, что все наоборот! Спасибо большое. –

+0

@ user2719058: на самом деле, это не bash специфически ... Я обеспечу оба пути в любом случае. –

1

С rename(1):

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

Это отдельная программа. Несколько менее элегантный способ в чистом Баш является

for f in *.pgm; do mv $f $((400+${f//[!0-9]/})).pgm; done 
Смежные вопросы