как я могу пакетно переименовывать файлы с помощью терминала?


у меня есть набор файлов, все из них nnn.MP4.mov Как я могу переименовать их так, что это просто nnn.mov?

10 55

10 ответов:

во-первых, сделайте сухой прогон (фактически не переименовывайте файлы) со следующим:

for file in *.mov
do
  echo mv "$file" "${file/MP4./}"
done

если все нормально, удалить echo из третьей строки, чтобы фактически переименовать файлы.

Я только что успешно использовал Automator (первый раз, когда я беспокоился), и он работает очень хорошо. Я сохранил автоматизацию как сервис. Потребовалось около 10 секунд, чтобы сделать что-то легко многоразовый:

  1. Открыть Автоматизаторов.
  2. В качестве типа документа выберите "сервис".
  3. изменить сервис получает выбранный " текст "на"файлы и папки".
  4. подумайте об изменении "любого приложения" на просто Finder.
  5. на боковой панели выберите " файлы & Папки "(в разделе Библиотека) и из перечисленных действий в Центральном столбце перетащите" переименовать элементы Finder "в правую сторону и поместите его в" перетащите действия или файлы здесь, чтобы построить рабочий процесс."
  6. измените только что добавленное действие с "Добавить дату или время" на "Сделать последовательным".
  7. Нажмите кнопку " Параметры "в нижней части действия и установите флажок"показывать это действие при запуске рабочего процесса".
  8. нажмите "CMD+S", чтобы сохранить службу как что-то вроде "заменить Текст.".
  9. готово!

теперь вы можете щелкнуть правой кнопкой мыши любой выбор в Finder, перейти в меню службы и выбрать "заменить текст", заполнить, как вы хотите, чтобы текст был изменен или заменен-и нажмите "Продолжить", чтобы применить настроенные изменения.

for n in *.MP4.mov
do
   mv $n $(echo $n | sed -e 's/.MP4//')
done

Это будет работать даже на действительно старых оболочках, которые не имеют подстановки параметров, и это немного более читабельно для моих глаз, по крайней мере.

чтобы проверить печать операции:

for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";echo mv \"$file\" \"$j\"; done

чтобы заставить его работать:

for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";mv "$file" "$j"; done

на mac OSX вы можете установить rename команда через Homebrew:brew install rename

затем вы можете переименовать с помощью find / replace из этой папки в командной строке:

rename 's/\.MP4\././' *

вы также можете увидеть больше вариантов, используя man rename.

for i in `ls *png`;do echo mv $i "${i%%.*}"@xx."${i##*.}";done

vimv позволяет переименовывать несколько файлов, используя возможности редактирования текста Vim.

ввод vimv открывает окно Vim, в котором перечислены все файлы, и вы можете выполнить сопоставление шаблонов, визуальный выбор и т. д. Для редактирования имен. После выхода из Vim файлы будут переименованы.

[отказ от ответственности: я автор инструмент]

OS X имеет Rename Files… пункт контекстного меню, которое вызывается при выборе двух или более файлов в Finder. Обеспечивает ту же функцию, что и ответ автомата выше. Хотя Automator предоставляет вам инструменты, чтобы пойти дальше, если вы хотите.

(Я знаю, что ОП попросил терминал, но 33 других, таких как Automator response)

ls -1 *.MP4.mov | while read f; do mv -i "$f" "$(basename \"$f\" .MP4.mov)"; done

Edit: полностью переписано.

for i in *; 
do j=`echo $i | cut -d . -f 1`; 
j=$j".mov";
mv $i $j; 
done

это будет вырезать все до первой точки и добавляет .мов

но если некоторые файлы например, Привет.2.мов и привет.1.mov one будет перезаписан, поэтому используйте его осторожно ^^