2015-06-10 2 views
0

У меня есть много файлов в каталоге, имеющее расширение, как .text (2) и .text (1). Я хочу удалить цифры из расширения и вывода должно быть как .text и .text. Может кто-нибудь, пожалуйста, помогите мне со сценарием оболочки для этого? Я использую centOs.Как удалить номера из расширений из файлов

+0

Пожалуйста, ваши попытки –

ответ

1

Довольно переносимый способ сделать это будет так:

for i in *.text*; do mv "$i" "$(echo "$i" | sed 's/([0-9]\{1,\})$//')"; done 

Loop через все файлы, которые заканчиваются в .text, после чего-либо. Используйте sed, чтобы удалить любые круглые скобки, содержащие одну или несколько цифр с конца каждого имени файла.

Если все номера в скобках являются однозначными числами, и вы используете Баш, вы можете также использовать встроенный расширение параметра:

for i in *.text*; do mv "$i" "${i%([0-9])}"; done 

Расширение удаляет любые скобки, содержащие одну цифру от конец каждого имени файла.

+0

... и сделать пробный прогон, чтобы увидеть, какие файлы будут перемещены, вы с добавьте 'echo' перед' mv'. –

+0

Спасибо, Том ... это работает .... !! не в состоянии повысить свой ответ, потому что отсутствие репутации – vishal

0

Другой способ без петель, но и с СЭД (и все внутри регулярного выражения в) является трубопровод к Sh:

ls *text* | sed 's/\(.*\)\..*/mv \1* \1.text/' | sh 

Пример:

[...]$ ls 
    xxxx.text(1) yyyy.text(2) 
[...]$ ls *text* | sed 's/\(.*\)\..*/mv \1* \1.text/' | sh 
[...]$ ls 
    xxxx.text yyyy.text 

Пояснение:

Все между \( и \) хранится и может быть снова вставлена ​​на \1 (или \2, \3 , ... последовательное число для каждой пары круглых скобок). Таким образом, приведенный выше код сохраняет все символы до первой точки \. и после этого, соединения последовательности, как это:

mv xxxx* xxxx.text 
mv yyyy* yyyy.text 

который передается по конвейеру Sh

0

Наиболее простой способ, если файлы находятся в одной папке

rename 's/text\([0-9]+\)/text/' *.text* 

link

Смежные вопросы