Переименуйте все файлы в папке с префиксом в одной команде unix

Переименуйте все файлы в папке с префиксом "Unix_", то есть предположите, что папка имеет два файла a.txt и b.pdf, то оба они должны быть переименованы из одной команды в Unix_a.txt и Unix_b.pdf

Ответ 1

Если ваши имена файлов содержат без пробелов, и у вас нет подкаталогов, вы можете использовать простой цикл for:

$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done 

В противном случае используйте удобную команду rename (которая является perl script) - хотя она может быть недоступна из коробки в каждом Unix (например, OS X не поставляется с rename).

Краткий обзор на debian-administration.org:

Если ваши имена файлов содержат пробелы, проще использовать find, в Linux должно работать следующее:

$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh

В BSD-системах, к сожалению, нет опции -printf. Но GNU findutils должен быть установлен (например, Mac OS X с brew install findutils).

$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh

Ответ 2

Попробуйте выполнить команду rename в папке с файлами:

rename 's/^/Unix_/' *

Ответ 4

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

В OS X Yosemite Apple интегрировала функции переименования пакетов прямо в Finder. Подробная информация доступна здесь. Я также скопировал приведенные ниже шаги,

Переименовать несколько элементов

  • Выберите элементы, затем нажмите Control один из них.

  • В контекстном меню выберите "Переименовать элементы".

  • Во всплывающем меню ниже Переименовать элементы папок, выберите замену текста в именах, добавьте текст в имена или измените формат имени.

    • Заменить текст: введите текст, который вы хотите удалить, в поле "Поиск", затем введите текст, который вы хотите добавить, в поле "Заменить на".

    • Добавить текст: введите текст, который вы хотите добавить в поле, затем выберите, чтобы добавить текст до или после текущего имени.

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

  • Нажмите "Переименовать".

Если у вас есть общий шаблон в ваших файлах, вы можете использовать текст "Заменить", иначе "Добавить текст" также выполнит задание.

Ответ 5

Вы можете использовать -i вместо -I {}

ls | xargs -i mv {} unix_{}

Это также отлично работает.

  • ls - перечислены все файлы в каталоге
  • xargs - принимает все файлы по строкам из-за опции -i
  • {} является заполнителем для всех файлов, необходимо, если xargs получает более двух аргументов в качестве ввода

Использование awk:

ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh

Ответ 6

Также работает для элементов с пробелами и игнорирует каталоги

for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done

Ответ 7

С rnm (вам нужно будет установить его):

rnm -ns 'Unix_/fn/' *

или

rnm -rs '/^/Unix_/' *

P.S: Я являюсь автором этого инструмента.