Вот ответ на бонусный вопрос.
Я на самом деле хочу поместить дату создания фотографии в имя файла, чтобы получить что-то вроде 20091231 2359 New Year.jpg. Боюсь, что мне нужна какая-то нетривиальная комбинация команд для достижения этого?
Предполагая, что вы хотите взять дату создания фотографии из данных EXIF, вам понадобится отдельный инструмент для этого. К счастью, оказывается, что jhead
предлагает тривиальный способ сделать именно то, что вы хотите, с его -n
опцией.
$ jhead -h
[...]
-n[format-string]
Rename files according to date. Uses exif date if present, file
date otherwise. If the optional format-string is not supplied,
the format is mmdd-hhmmss. If a format-string is given, it is
is passed to the 'strftime' function for formatting
In addition to strftime format codes:
'%f' as part of the string will include the original file name
[...]
Вот пример:
$ jhead -n%Y-%m-%d-%f New_year.jpg
New_year.jpg --> 2009-12-31-New_year.jpg
Изменить : Конечно, чтобы сделать это для кучу фотографий, это было бы что-то вроде:
$ for i in *jpg; do jhead -n%Y-%m-%d-%f $i; done
Чтобы настроить форматирование даты по своему вкусу, взгляните на вывод date --help
, например; это перечислит доступные коды формата.
(jhead широко доступен для разных систем. Если вы, например, используете Ubuntu или Debian, просто введите его, sudo apt-get install jhead
чтобы установить.)
Программа переименования будет работать только для части переименования. Это так же, как пример, который вы видели на странице руководства, только что переключился.
источник
Ключевым моментом является то, что, если вы видели пример, который показывает, как обработать одну часть имени файла с помощью регулярного выражения, это единственный пример, который вам нужен. Расширения не имеют специального статуса в файловых системах Unix - они являются лишь частью имени файла, которое происходит после
.
символа.источник
mv "$file" yourfile"${file#myfile}"
. Работает на любой современной оболочке, похожей на Bourne (или на любую оболочку POSIX), но, вероятно, не на настоящую оболочку Bourne.Вот еще несколько различных способов манипулировать именами файлов
Расширения параметров в
mv
команде работают следующим образом:${f%.*}
- Удалить кратчайший соответствующий шаблон из конца строки, содержащейся в этом$f
, в этом случае удалить все после и включая последнюю точку. Сингл%
означает «самый короткий с конца».${f##*.}
- Удалить самый длинный соответствующий шаблон из начала строки, содержащейся$f
, в этом случае все до и включая последнюю точку (включая все другие точки). Двойной#
(##
) означает «самый длинный с самого начала».Так, например, если
$f
содержит «Foo.bar.baZ.jpg»:дает
а также
дает
Таким образом
mv
, однажды развернутая команда будет выглядеть так:источник
f%
иf##
описано здесь, например: tldp.org/LDP/abs/html/parameter-substitution.htmlВ Linux нет расширений файлов.
Используйте регулярные выражения, чтобы вырезать определенные подстроки из имени файла и получить к ним доступ.
Пример:
Реальный сценарий: вы извлекаете html из файла chm. Имена файлов в Windows нечувствительны к регистру, поэтому в Linux вы получите неработающие ссылки. У вас есть файл с именем index.HTML , но href = "index.html" в URL. Итак, ваша цель - адаптировать имена файлов, чтобы они соответствовали ссылкам на них.
Предположим, у вас есть имя файла в переменной:
Начиная с версии 3.0, bash сама поддерживает регулярные выражения, поэтому вам не нужны никакие дополнительные инструменты, такие как grep / sed / perl и т. Д. Для выполнения операций со строками. В следующем примере показана замена внутреннего соответствия в строке:
Строки соответствия и замены могут быть параметризованы, если вы хотите, это обеспечивает дополнительную гибкость при написании скрипта. Следующий фрагмент кода достигает той же цели:
Консультируйтесь с документами bash для дополнительной информации.
источник
Вот еще один:
источник
Всегда есть несколько способов сделать это. Я поставил следующий скрипт как / usr / local / bin / mrename.
Затем в сценарии, содержащем файлы фотографий, просто введите: mrename
Также в скрипте есть дополнительная закомментированная функция для масштабирования фотографий (используя ImageMagick).
Надеюсь, что это полезно для некоторых людей.
источник
Вы можете использовать
-X/--keep-extension
опцию сrename
(версия 1.600):-X, --keep-extension Save and remove the last extension from a filename, if there is any. The saved extension will be appended back to the filename at the end of the rest of the operations.
rename
доступно для Mac из Homebrew и для Linux из Linuxbrew (среди прочих вариантов установки, конечно).источник