Файлы переименования пакета

Также обратите внимание на это, если Вы просто хотите искать тот, соответствующий regex, GNU grep с --color будет работать — просто передают Ваш по каналу tail вывод через это.

155
24.08.2010, 03:52
14 ответов

Если Вы используете Bash или другую совместимую с POSIX оболочку:

for f in *.png; do
    mv -- "$f" "${f#image}"
done
109
27.01.2020, 19:27
  • 1
    Это - один из методов замены параметра, показанных в Бондарях Mendel, Усовершенствованное руководство по созданию сценариев Bash tldp.org/LDP/abs/html –  W_Whalley 25.08.2010, 17:15
  • 2
    @W_Whalley я настоятельно рекомендую избежать что руководство, в пользу Руководства Bash Wooledge. –  Wildcard 27.11.2016, 19:55
  • 3
    @Wildcard: каковы Ваши причины рекомендации избежать руководства ABS? –  Christian Severin 11.10.2017, 14:27
  • 4
    @fusion.slope, любая передача весь код в единственно заключенном в кавычки аргументе awk, или вставьте код в файл и выполните его с awk -f that.script.file input-file ---------121 продвижение--------56616----@ChristianSeverin плохих методов и напрямую взломанного кода. Проверьте ссылки на моей странице профиля. –  Wildcard 11.10.2017, 19:20

ls *png |, в то время как считано-r f; сделайте f2 = "'echo $f | sed-e's/image//'' "; $f$f2 mv;готово

-5
27.01.2020, 19:27
  • 1
    Что-то не правильно: "mv: недостающий целевой операнд файла после 'image0001.png'" –  Internet man 24.08.2010, 03:06
  • 2
    Существует много проблем с Вашим кодом. Парсинг вывода ls просто призывает к проблеме. read должен быть read -r. все подстановки переменных должны быть в двойных кавычках. –  Gilles 'SO- stop being evil' 24.08.2010, 03:20
  • 3
    Вы могли записать это эффективнее как for f in *png; do f2="$(echo "$f" | sed -e 's/image//')"; mv "$f" "$f2"; done. Парсинг ls ни необходимо, ни хорошая идея. –  kojiro 10.02.2014, 06:24

Мне нравится Perl так:

perl -nlE '$old=$_; s/image//; qx(mv $old $_)'

Можно также использовать тот же шаблон для других задач как копирование файлов к другому каталогу:

perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'
6
27.01.2020, 19:27
  • 1
    Или (более безопасный!): rename($old,$_) –  reinierpost 07.08.2014, 14:57

Я обычно использую хороший и простой mmv (страница справочника) утилита для этого варианта использования:

$ mmv "image*.png" "#1.png"

выполнит Вашу задачу.

#1 в целевом шаблоне будет заменен с любыми соответствиями подстановочный знак в исходном шаблоне. Это также работает на несколько подстановочных знаков и может использоваться, например, для изменения порядка частей имен файлов. Можно также легко сделать более сложные вещи как преобразование нижнего регистра к прописным буквам.

Удостоверьтесь, что защитили шаблоны от оболочки путем заключения в кавычки.

33
27.01.2020, 19:27
  • 1
    Спасибо за указание на эту утилиту. Я нашел его в Debian, Ubuntu и репозиториях Cygwin. Я испытал затруднения из-за страницы справочника, но нашел некоторые веб-страницы и этот вопрос о Переполнении стека, который помог объяснить, как Вы использовали его. stackoverflow.com/questions/417916/how-to-do-a-mass-rename –  W_Whalley 25.08.2010, 19:12
  • 2
    Спасибо, я добавил еще некоторую информацию к ответу для создания этого более ясным. –  Marcel Stimberg 25.08.2010, 22:28
  • 3
    Не Может upvote он достаточно! Это является настолько простым и дружественным. Доступный для OS X в домашнем пиве. –  Greg Dubicki 17.03.2017, 11:33

zmv

Оболочка zsh имеет мощный пакет, переименовывают названную команду zmv.

Сначала необходимо включить zmv управляйте следующим образом (это может войти в Ваш ~/.zshrc).

autoload zmv

Базовый синтаксис zmv PATTERN REPLACEMENT. Шаблон является выражением шарика оболочки. Части шаблона могут быть окружены круглыми скобками. Текст замены может содержать $1, $2, и т.д. относиться к Энной заключенной в скобки группе в шаблоне. Например:

zmv 'image(*.png)' '$1'

Можно также попросить, чтобы zsh автоматически определил $1, $2, и т.д. соответствовать подстановочным символам в шаблоне:

zmv -w 'image*.png' '$1.png'
41
27.01.2020, 19:27
  • 1
    sweeeeeeeeeeeeeeeeeet. еще одна причина я должен изучать zsh. –  ixtmixilix 11.10.2011, 16:16
  • 2
    @ixtmixilix, что должно учиться? Только начните использовать его и возможно добавьте престо (github.com/sorin-ionescu/prezto) для некоторого дополнительного великолепия. –  Gerry 15.08.2012, 11:09
  • 3
    Действительно прохладный, как указано в человеке zmv это может быть далее упрощено путем добавления псевдонима mmv ='noglob zmv-W' к: mmv *.c.orig orig / *.c –  Bretsko 29.08.2017, 19:10

На Debian и производных, Perl rename работы так же к sed как это:

  rename -v 's/image//' *.png

Существует также rename от util-linux это работает как это, вместо этого:

  rename image '' *.png
112
27.01.2020, 19:27
  • 1
    действительно необходимо объяснить, что это - программа жемчуга, которую, возможно, придется установить и что он берет регулярные выражения в качестве аргумента. –   24.08.2010, 03:30
  • 2
    А-ч, я не знал об этом. Я дам кредит каноническому ответу, когда я определю его :) –  Internet man 24.08.2010, 03:33
  • 3
    Это rename программа прибыла из распределения Perl в качестве примера. Debian и Ubuntu поставляют его как /usr/bin/rename. Другие варианты Unix не могут обеспечить его или могут обеспечить совершенно другое /usr/bin/rename. –  Gilles 'SO- stop being evil' 24.08.2010, 10:17
  • 4
    Некоторые версии rename возьмите от к заменяющему шаблону: rename [options] <expression> <replacement> <file>... –  melds 29.12.2015, 20:42
  • 5
    Если Вы используете базирующуюся систему Debian затем sudo склонный - добираются, установка переименовывают, то можно использовать переименовать команду. Это - sed для имен файлов. –  ctrl-alt-delor 31.12.2016, 19:20

рекурсивный

легкий рекурсивно вызывают выбор image*png файлы, и не принимает потребности иметь дело с новой строкой в именах файлов

find . -name "image*.png" | while read f; do mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; done

Безопасный, может иметь дело с пробелами, новыми строками, обратными косыми чертами и чем-либо еще:

find . -name "image*.png" | while IFS= read -r f; do 
   mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; 
done
3
27.01.2020, 19:27

POSIX sh использующий некоторое время цикл

Чтение имен от find команда.

find . -maxdepth 1 -type f -name 'image*png' | while IFS= read -r f; do
  mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"
done

Чтение имен из файла

while IFS= read -r f; do mv -v "$f" "$(echo "$f"|sed -e 's/^\.\/image//' - )"; done < flist
1
27.01.2020, 19:27

POSIX sh для цикла

Использование sed для переименования

for i in image*jpg
do 
  mv -v "$i" "$(echo "$i" | sed -e 's/^\.\/image//' - )"
done
9
27.01.2020, 19:27

QMV

Команда qMV . Из RenaMeutils открывает редактор, показывающий список имена файлов с двумя колониями, разделенными вкладкой. Каждая строка показывает одну из имена файлов, то же самое в обоих столбцах. Правая колонна представляет новые имена файлов.
Вносить изменения, отредактируйте имена на правой стороне. В этом примере :% S / ... или визуальный режим блока полезны.

Имя имена в вашем редакторе

$ qmv *.png

в редакторе:

image0001.png           image0001.png
image0002.png           image0002.png
image0003.png           image0003.png         
~                                             
~                                             
~                                             
~                                             
"/tmp/user/1000/qmvxWyVMs" 3L, 93C

Редактирование имен в правом столбце:
(Извлечение изображения префикс префикс из всех линий с использованием режима визуального блока)

image0001.png           0001.png
image0002.png           0002.png
image0003.png           0003.png         
~                                             
~                                             
~                                             
~                                             
:wq

Журнал переименования:

image0001.png -> 0001.png
image0002.png -> 0002.png
image0003.png -> 0003.png

(например. Ubuntu: APT-Get Установить RenaMeutils )

6
27.01.2020, 19:27

Вы можете использовать этот инструмент: rnm ( веб-страница )

В вашем случае команда будет выглядеть так:

rnm -rs '/^image//' *.png

Вы можете найти больше примеров / документов здесь .

0
27.01.2020, 19:27

Для Windows и Linux подойдет этот Perl-скрипт ; в этом случае:

$ rnm -l 's/^image//' '*.png'

Сценарий мог запускаться рекурсивно по каталогам и даже добавлять счетчик ко всем из них:

$ rnm -r 's/^/$counter./' '/\.png$/'

UTF -8 символов также корректно обрабатываются как в Windows, так и в Linux.

1
20.08.2021, 13:40

Используйте mvс Расширение скобки внутри контура.

for N in {1..100}; do
     mv {,new_}file$N.txt
done

Перед запуском команды mvоболочка расширит ее до такой команды для каждого файла, где $Nзаменит соответствующий порядковый номер.

mv file$N.txt new_file$N.txt

, поэтому к имени файла добавляется префикс .

-121 ---124642 ​​-

Попробуйте brename (https://github.com/shenwei356/brename), практичный межплатформенный -командный инструмент -линейный инструмент для безопасного пакетного переименования файлов/каталогов с помощью регулярных выражений (, поддерживающий Windows, Linux и OS X ).

@patrickDurusau сказал:

Linux has a variety of batch file renaming options but I didn’t see any short-comings in brename that jumped out at me.

Характеристики:

  • Крестовина -платформа . Поддержка Windows, Mac OS X и Linux.
  • Сейф . Путемпроверки потенциальных конфликтов и ошибок .
  • Фильтрация файлов . Поддержка включения и исключения файлов с помощью регулярных выражений. Нет необходимости запускать такие команды, как find./ -name "*.html" -exec CMD.
  • Переименование подсовпадения с соответствующим значением через ключ -файл значений .
  • Переименование по возрастанию целого числа .
  • Рекурсивное переименование файлов и каталогов .
  • Поддержка пробного хода .
  • Цветной вывод .

Команда:

$ brename -f.png -p image
[INFO] checking: [ ok ] 'image0001.png' -> '0001.png'
[INFO] checking: [ ok ] 'image0002.png' -> '0002.png'
[INFO] checking: [ ok ] 'image0003.png' -> '0003.png'
[INFO] 3 path(s) to be renamed
[INFO] renamed: 'image0001.png' -> '0001.png'
[INFO] renamed: 'image0002.png' -> '0002.png'
[INFO] renamed: 'image0003.png' -> '0003.png'
[INFO] 3 path(s) renamed
1
20.08.2021, 13:40

Использование расширения раскоса оболочки:

for N in {0001..1000}; do mv "{image,}$N.png"; done
2
20.08.2021, 13:40

Теги

Похожие вопросы