Однострочник, который можно легко набирать прямо с терминала:
for f in *.md; do mv "$f" "test - $f"; done
Или переписать в отдельных строках вместо точек с запятой:
for f in *.md
do
mv "$f" "test - $f"
done
экспозиция
Синтаксис for
(в sh
):
for NAME [in WORDS ... ] ; do COMMANDS; done
Здесь наш NAME
есть f
и наши WORDS
все файлы в текущем каталоге соответствии *.md
. Таким образом, переменная $f
будет заменена на каждый соответствующий файл *.md
.
Так для a.md
:
mv "$f" "test - $f"
становится
mv "a.md" "test - a.md"
Кавычки важны, потому что каждое имя файла $f
может содержать пробелы. В противном случае mv
подумал бы, что каждое слово было отдельным файлом. Например, если бы не было кавычек, а файл назывался Foo Bar.md
, он переводился бы как:
mv Foo Bar.md test - Foo Bar.md
который не будет работать так, как задумано. Но, заключив $f
в кавычки, имеет смысл:
mv "Foo Bar.md" "test - Foo Bar.md"
Принимая во внимание синтаксис for
, вы также можете переименовать подмножество всех *.md
файлов, указав каждый явно:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Или используя расширение оболочки:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done
Если у вас есть
prename
...Используя обычные команды оболочки:
источник
prename
?sudo apt-get install
)?mmv
1 , 2 тоже очень хороший инструмент для такой задачи, применительно к текущей работе, было быКонечно, если вы хотите добавить «test -» только в a.md, b.md и c.md, но не в a1.md, что-то вроде
было бы более уместным.
Я действительно могу предложить это, особенно если у вас много таких проблем.
Если вы ищете графический интерфейс, попробуйте gprename .
источник
Вместо использования цикла for, который не будет работать в пробелах, если вы не переопределите переменную IFS, я бы рекомендовал использовать цикл while в сочетании с find. Следующее будет работать при запуске из того же каталога, что и файлы
там находится строка "basename", так что find выведет только имя файла - без компонентов пути, которые могут привести к прерыванию операции переименования.
источник
Я знаю, что уже поздно, но если кто-то ищет что-то подобное, у меня это сработало:
источник
Если у вас есть в
zsh
наличии, вы можете использоватьzmv
:Вы можете проверить команду с:
-n
значит всухую, т.е. только покажи что будет.-w
неявно ставит круглые скобки вокруг подстановочных знаков, заставляет работать обратные ссылки.источник
В bash добавление «Prepend text -» ко всем файлам в папке:
источник
for i in *; do mv "$i$" "Prepend text - $i"; done