2015-02-12 3 views
0

У меня есть набор файлов, которые я хотел бы переименовать, используя новые имена файлов, хранящиеся в файле txt. Мои исходные файлы:Переименование списков

7170M 
7172M 
7187P 
7192N 
7198P 

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

1956_26_7170M 
1962_12_7172M 
1989_32_7187P 
1986_22_7192N 
1943_13_7198P 

Я создал документ new_names.txt, содержащий новые имена файлов и попытался следующее.

for f in *.txt; do mv "$f" "$new_name"; done < new_names.txt 

Но это изменяет только первое имя файла.

ответ

2

Вы можете хранить только новые части имен в файле (при условии, вы будете обрабатывать файлы в отсортированном порядке):

1956_26 
1962_12 
1989_32 
1986_22 
1943_13 

Затем перебирать файлы, прочитать одну строку для каждого из них:

for file in 7* ; do 
    read new 
    mv "$file" "$new"_"$file" 
done < new_names.txt 

Ваша главная проблема была чем for ... in не читает из файла, он перебирает список дал после in. В вашем случае список состоял только из одного участника: new_names.txt. Кроме того, вы не заселяли $ new_name нигде.

+0

Спасибо за ваше предложение и объяснение того, где я совершил ошибку. – user3635159

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