2016-03-31 7 views
1

Мне нужно было бы переименовать тысячи файлов, прямо сейчас я делаю это с удалением первых символов x, но это может быть длительный процесс, поскольку количество символов необходимо было удалить изменения.Как удалить общий шаблон префикса из нескольких имен файлов в bash

Исходные файлы называются так:

4023 - 23 - Animal, crocodile 4 legs.txt 
243 - 4 - Animal, dog 4 legs.txt 
5450 - 2 - Animal, bird 2 legs.txt 

Переименован:

Animal, crocodile 4 legs.txt 
Animal, dog 4 legs.txt 
Animal, bird 2 legs.txt 

кажется самым легким было бы обрезать все, прежде чем появится «А», но я не знаю, как сделай это. Что-то с циклом, которое можно было бы использовать как скрипт bash, было бы потрясающе.

ответ

1

Вы можете использовать bash parameter expansion

${VAR#*-*- }

удалить префикс по шаблону. Это использует текст в переменной оболочки VAR и создает строку на основе удаления префикса, который соответствует шаблону подстановки *-*- - например. любые символы, то а тир тогда любые символы, а затем второй тир и пробел

Для того, чтобы получить имена файлов в цикле, вы можете просто использовать Баш for с рисунком

for VAR in *.txt; do mv "$VAR" "${VAR#*-*- }"; done 

цитирование необходимо в mv предотвратить пробелы в именах файлов раскалывается на несколько аргументов оболочкой

+0

Большое спасибо, работает отлично. – Juicee

0

вы можете использовать cut -d"-" -f3:

for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | cut -d'-' -f3 `"; done 

или игнорировать первое место:

for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | sed -e 's/^.*- //g'`"; done 

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

  • Нет связанных вопросов^_^