Изменение имен нескольких файлов Linux

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

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

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

Любая команда или script?

Ответ 1

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

for FILE in *1.txt; do mv "$FILE" $(echo "$FILE" | sed 's/1/2/'); done

Ответ 2

for f in {a..c}1.txt; do echo "$f" "${f/1/2}"; done

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

и я хочу заменить "apple" на "linux"

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

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

Ответ 3

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

rename 1 2 *1.txt

Ответ 4

ls *1.txt | perl -ne 'chomp; $x = $_; $x =~ s/1/2/; rename $_, $x;'

Ответ 5

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

for FILE in $(find . -name *1.txt); do mv "$FILE" "${FILE/1/2}"; done;

Ответ 6

Что-то вроде этого должно работать:

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

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