В каталоге несколько файлов, начинающихся с префикса fgh
, например:
fghfilea
fghfileb
fghfilec
Я хочу переименовать их все, чтобы начать с префикса jkl
. Есть ли одна команда, чтобы сделать это вместо переименования каждого файла в отдельности?
Ответы:
Есть несколько способов, но с помощью
rename
будет, вероятно, самым простым.Используя одну версию
rename
:Используя другую версию
rename
(так же, как ответ Judy2K ):Вы должны проверить страницу руководства вашей платформы, чтобы увидеть, что из вышеперечисленного применимо.
источник
rename
тогда вы показываете синтаксис для unixhelp.ed.ac.uk/CGI/man-cgi?rename, другойrename
похоже, специфичный для Linux скрипт или утилита. Если вас вообще волнует переносимость, продолжайте использоватьsed
циклы и или встроенный скрипт Perl.brew install rename
на OS X :)Вот как
sed
иmv
можно использовать вместе, чтобы сделать переименование:Согласно комментарию ниже, если в именах файлов есть пробелы, кавычки, возможно, должны окружать подфункцию, которая возвращает имя для перемещения файлов:
источник
for f in fgh*; do mv "$f" "$(echo $f | sed 's/^fgh/jkl/g')"; done
touch fghfilea fghfileb fghfilec fghfile\ d
. Предлагаю принять во внимание замечания @DaveNelson.переименование может быть не в каждой системе. так что если у вас его нет, используйте оболочку этого примера в bash shell
источник
sed
команда не требуется. Этот проще, чем ответ @ nik.sh
ни в других оболочках.Используя mmv :
источник
;
в сочетании с#1
. пример:mmv ";fgh*" "#1jkl#2"
Есть много способов сделать это (не все из них будут работать на всех системах Unixy):
ls | cut -c4- | xargs -I§ mv fgh§ jkl§
§ можно заменить на что угодно. Вы могли бы сделать это
find -exec
тоже, но это ведет себя немного по-разному во многих системах, поэтому я обычно избегаю этогоfor f in fgh*; do mv "$f" "${f/fgh/jkl}";done
Грубый но эффективный как говорится
rename 's/^fgh/jkl/' fgh*
Очень мило, но переименования нет в BSD, которая является самой распространенной системой Unix на данный момент.
rename fgh jkl fgh*
ls | perl -ne 'chomp; next unless -e; $o = $_; s/fgh/jkl/; next if -e; rename $o, $_';
Если вы настаиваете на использовании Perl, но в вашей системе нет переименования, вы можете использовать этого монстра.
Некоторые из них немного запутаны, и этот список далеко не полон, но вы найдете то, что вам нужно здесь, практически для всех Unix-систем.
источник
ls
выходные данные не должны быть проанализированы и / илиисточник
Используя
find
,xargs
иsed
:Это сложнее, чем решение @ nik, но позволяет рекурсивно переименовывать файлы. Например, структура,
будет преобразован в это,
Ключ, чтобы заставить его работать,
xargs
состоит в том, чтобы вызвать оболочку из xargs .источник
Чтобы установить скрипт переименования Perl :
Есть два переименования, как указано в комментариях в ответе Stephan202. Дистрибутивы на основе Debian переименованы в Perl . Redhat / rpm дистрибутивы имеют C переименование .
OS X не имеет установленного по умолчанию (по крайней мере, в 10.8), равно как и Windows / Cygwin.
источник
Вот способ сделать это с помощью командной строки Groovy:
источник
На Солярисе вы можете попробовать:
источник
for file in $(find)
это в корне неверно и не может быть исправлено с помощью цитирования. Еслиfind
возвращается./file name with spaces
вы получитеfor
петлю на./file
,name
,with
иspaces
и никакое количество квотирования внутри цикла поможет (или даже необходимо).источник
Этот скрипт работал для меня для рекурсивного переименования с каталогами / именами файлов, которые могут содержать пробелы:
Обратите внимание на
sed
выражение, которое в этом примере заменяет все вхождения;
пробелом. Это, конечно, должно быть заменено в соответствии с конкретными потребностями.
источник
Использование инструментов StringSolver (Windows & Linux Bash), которые обрабатываются на примерах:
Сначала он вычисляет фильтр на основе примеров , где входными данными являются имена файлов и выходные данные (ok и notok, произвольные строки). Если бы фильтр имел опцию --auto или был вызван один после этой команды, он создаст папку
ok
и папкуnotok
и отправит им файлы соответственно.Затем, используя фильтр,
mv
команда представляет собой полуавтоматическое движение, которое становится автоматическим с модификатором --auto. Используя предыдущий фильтр благодаря --filter, он находит отображение изfghfilea
вjklfilea
и затем применяет его ко всем отфильтрованным файлам.Другие однолинейные решения
Другие эквивалентные способы сделать то же самое (каждая строка эквивалентна), так что вы можете выбрать свой любимый способ сделать это.
Многошаговое решение
Чтобы тщательно определить, хорошо ли работают команды, вы можете набрать следующее:
и когда вы уверены, что фильтр хорош, выполните первый шаг:
Если вы хотите протестировать и использовать предыдущий фильтр, введите:
Если преобразование не то, что вы хотели (например, даже с
mv --explain
вы видите, что что-то не так), вы можете напечатать,mv --clear
чтобы перезапустить движущиеся файлы, или добавить больше примеров,mv input1 input2
где input1 и input2 - другие примеры.Когда вы уверены, просто введите
и вуаля! Все переименование осуществляется с помощью фильтра.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь соавтором этой работы, созданной для академических целей. Возможно, скоро появится функция создания bash.
источник
Это было намного проще (на моем Mac) сделать это в Ruby. Вот 2 примера:
источник
Используя renamer :
Снимите
--dry-run
флажок, как только вы будете довольны, результат будет правильным.источник
Моя версия переименования массовых файлов:
источник
Я бы порекомендовал использовать свой собственный скрипт, который решает эту проблему. У него также есть опции для изменения кодировки имен файлов и для преобразования комбинированных диакритических знаков в заранее составленные символы, проблема, с которой я всегда сталкиваюсь, когда копирую файлы с моего Mac.
источник
stale over time
Это сработало для меня с помощью регулярных выражений:
Я хотел, чтобы файлы были переименованы так:
usig регулярное выражение [az | _] + 0 * ([0-9] +. ), где ([0-9] +. ) - это подстрока группы для использования в команде переименования
Производит:
Другой пример:
Производит:
Предупреждение, будь осторожен.
источник
Я написал этот скрипт для поиска всех файлов .mkv, рекурсивно переименовывая найденные файлы в .avi. Вы можете настроить его под свои нужды. Я добавил некоторые другие вещи, такие как получение файлового каталога, расширения, имени файла из пути к файлу, только если вам нужно обратиться к чему-то в будущем.
источник
Общий сценарий для запуска
sed
выражения в списке файлов (объединяетsed
решение сrename
решением ):Вызвать, передав скрипту
sed
выражение, а затем любой список файлов, как версияrename
:источник
Вы также можете использовать приведенный ниже скрипт. на терминале очень легко работать ...
// Переименование нескольких файлов одновременно
Пример:-
источник
Еще один возможный параметр расширения :
источник