Изменить имена нескольких файлов Linux - PullRequest
12 голосов
/ 08 августа 2011

У меня есть несколько файлов с именами a1.txt, b1.txt, c1, txt ... на машине с Ubuntu.

Есть ли быстрый способ изменить все имена файлов на a2.txt, b2.txt, c2.txt ...?

В частности, я хотел бы заменить часть строки имени. Например, каждое имя файла содержит строку с именем «яблоко», и я хочу заменить «яблоко» на «груша» во всех именах файлов.

Любая команда или сценарий?

Ответы [ 6 ]

22 голосов
/ 08 августа 2011

без дополнительного программного обеспечения вы можете:

for FILE in *1.txt; do mv "$FILE" $(echo "$FILE" | sed 's/1/2/'); done
4 голосов
/ 08 августа 2011
for f in {a..c}1.txt; do echo "$f" "${f/1/2}"; done

замените 'echo' на 'mv', если вывод выглядит правильно.

и я хочу заменить "яблоко" на "linux"

for f in *apple*; do mv "$f" "${f/apple/linux}"; done

Фигурные скобки в строке 1 должны работать как минимум с bash.

2 голосов
/ 08 августа 2011

Следующая команда переименует указанные файлы, заменив первое вхождение 1 в их имени на 2:

rename 1 2 *1.txt
0 голосов
/ 03 сентября 2015

Вот еще один вариант, который работал для меня (следуя приведенным выше примерам) для файлов в разных подкаталогах

for FILE in $(find . -name *1.txt); do mv "$FILE" "${FILE/1/2}"; done;
0 голосов
/ 08 августа 2011

Примерно так должно работать:

for i in *1.txt; do
    name=$(echo $i | cut -b1)
    mv $i ${name}2.txt
done

Изменить в соответствии с вашими потребностями.

0 голосов
/ 08 августа 2011
ls *1.txt | perl -ne 'chomp; $x = $_; $x =~ s/1/2/; rename $_, $x;'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...