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

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


person Jake Wilde    schedule 22.03.2011    source источник
comment
Установите muCommander. Он имеет пакетное переименование в стиле Total Commander. Зачем тратить время на эту паршивую сотню символов умопомрачительной пакетной команды?   -  person Nakilon    schedule 18.08.2013
comment
@Nakilon, потому что изучение командной строки дает больший возврат инвестиций   -  person Julien__    schedule 25.04.2017


Ответы (9)


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

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

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

person kurumi    schedule 22.03.2011
comment
Не могу понять, почему это не работает ... был вывод, и похоже, что это было, но на самом деле он ничего не делал. Наконец-то я понял, что вам нужно удалить оператор ECHO, чтобы заставить его что-то делать (в любом случае, в OSX 10.7). Поэтому, если вы сохраните оператор echo, вы можете протестировать его, чтобы увидеть, будет ли переименование работать так, как вы хотите, а затем удалите эхо, чтобы заставить его работать. Таким образом, эквивалент ren * -hd.png * .png в Windows: для файла в * .png do mv $ file $ {file / -hd /} done - person jsherk; 12.07.2012
comment
для запуска скрипта необходимо: 1. сохранить его в rename.sh файл; 2. Сделайте его исполняемым chmod 755 rename.sh; 3. запустить его из текущей папки, в которой есть файлы для переименования, и сценарий оболочки ./rename.sh; 4. Если результат хороший, удалите echo из скрипта и снова запустите. Мне нужно было добавить расширение к группе файлов. поэтому мое действие в скрипте было таким: mv "$file" "${file}.jpeg" - person Anatolii Pazhyn; 10.09.2016
comment
Это сценарий, и его нужно создать как файл, а затем запустить? Подсказки? - person wide_eyed_pupil; 21.05.2018
comment
Запуск как однострочный cmd, например: for file in *.mov; do echo mv "$file" "${file/MP4./}"; done, ; делает свое дело. - person Evi Song; 29.04.2021
comment
Для других случаев использования обратите внимание на общий формат команды: echo mv "$file" "${file/[replace_this]/[with_this]}" - person HLeb; 20.07.2021

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

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

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

person Johan    schedule 28.02.2012
comment
Я проголосовал против, потому что вопрос имеет терминальный тег. - person v42; 13.12.2013
comment
Отличный ответ, даже если это не то, о чем просил ОП. Приветствуются любые оправдания для меня, чтобы изучить Automator :-) Кстати, он не работает с папкой, но он работает с несколькими выбранными файлами. - person phatmann; 13.08.2014
comment
Отлично! Спасибо вам огромное. - person Youssef Moawad; 04.10.2014
comment
Фантастика! Не волнуйтесь о OP! - person Brody Robertson; 14.08.2015
comment
Разве вы не имеете в виду переход от добавления времени и даты к замене текста? - person wide_eyed_pupil; 21.05.2018
comment
Какие подстановочные знаки допускаются в полях поиска и замены? Совместима ли она с Grep? - person wide_eyed_pupil; 21.05.2018
comment
Я не мог понять, почему изменения имени моей службы не отражались в контекстном меню, пока я не понял, что в главном контекстном меню есть команда Rename Files… по умолчанию, моя - внутри подменю «Службы»! - person wide_eyed_pupil; 21.05.2018

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

Затем вы можете переименовать, используя команду find / replace из этой папки в командной строке:

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

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

person YPCrumble    schedule 04.08.2016

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

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
person SONIC3D    schedule 24.04.2013
comment
Спасибо за однострочное решение - person semihcosu; 12.09.2017

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

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

person vielmetti    schedule 01.10.2013
comment
Я применил это к файлам, которые используют _MG_ в своем имени, и мне нужно было идеально изменить его на -IMG_, изменив с помощью * и * посередине. Сработал шарм. Спасибо! - person Danijel-James W; 01.10.2014

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

(Я знаю, что OP запросил терминал, но еще 33 вроде ответа Automator)

person wide_eyed_pupil    schedule 21.05.2018

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

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

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

person thameera    schedule 13.08.2017

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

Редактировать: полностью переписан.

person Philipp T.    schedule 22.03.2011
comment
Если он делает то, что вы хотите, удалите -i - person Philipp T.; 22.03.2011
comment
я имею в виду, он думает, что должно быть продолжение строки - person Jake Wilde; 22.03.2011
comment
он переименовал его в "nnn.MP4.mov".mov - person Jake Wilde; 22.03.2011

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

это обрежет все до первой точки и добавит .mov

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

person sharpner    schedule 22.03.2011