Сортировка фотографий с использованием сценария оболочки

Большинство моих файлов фотографий имеют следующее соглашение об именах / формат IMG_20131204_120000.JPG, показывающее дату и время, когда была сделана фотография (соглашение об именах iPhone / Apple). Однако не все мои фотографии соответствуют этому соглашению об именах. С помощью этого форума я разработал следующий сценарий, чтобы классифицировать мои фотографии в каталогах дат:

cd '/photos/' for x in *.JPG *.jpg *.TIF *.tif *.PNG *.png *.BMP *.bmp *.GIF *.gif *.IMG *.img *.JPEG *.jpeg *.TIFF *.tiff; do d=$(date -r "$x" +%Y%m%d)" - Family Photos" t=$(expr substr "$x" 1 4) if [ "$t" == "IMG_" ]; then d=$(expr substr "$x" 5 8)" - Family Photos" fi mkdir -p "$d" >/dev/null 2>&1 mv -- "$x" "$d/" >/dev/null 2>&1 done 

PS. Я использую оператор IF, чтобы взять дату из самого имени файла, если имя файла находится в формате IMG_20131204_120000.JPG, так как эта дата наиболее точно отражает дату, когда фотография была фактически сделана, но если файл не соответствует этому соглашению об именах, я введите дату операционной системы, когда файл был последним изменен / создан.

Он работает отлично по большей части, за исключением случаев, когда есть файлы, которые начинаются с «IMG_», но затем не соответствуют соглашению об именах IMG_20131204_120000.JPG, например, файл IMG_001.JPG или IMG_Photo1. Есть ли лучший способ структурировать оператор IF здесь, чтобы он проверял не только то, что файл начинается с «IMG_», но и следующие 8 символов – это числа / формат даты?

2 Solutions collect form web for “Сортировка фотографий с использованием сценария оболочки”

Вы можете изменить команду if на что-то вроде этого:

 if [[ "$t" =~ IMG_+[0-9]{8}[a-zA-Z]*$ ]] 

=~ – оператор сравнения регулярных выражений, который вводится в bash версии 3 и выше.

Используя этот оператор if, вы можете поймать имена, такие как IMG_11111111alphabets.ext . Вы можете играть с ним и настраивать его в соответствии с вашими потребностями. Для получения дополнительной информации см. Следующее: регулярное выражение Баша

Я мог бы пойти по этому поводу по-другому. ImageMagik может читать метаданные exif из ваших файлов изображений. Формат не меняется.

 identify -verbose example.jpg 

возвращается (вместе с большим количеством другой информации)

Свойства:

дата: создание: 2013-11-07T04: 55: 55-06: 00
дата: изменить: 2013-11-07T04: 55: 55-06: 00

Вы могли бы grep создать дату, а затем разобрать ее, чтобы вам действительно не нужно иметь дело с условными утверждениями или вообще разбирать странное имя файла

  • Bash: Групповые строки, содержащие одну и ту же подстроку
  • Использование хеша в сценариях оболочки
  • Сопоставьте одну ячейку и замените значение другой ячейки в csv, используя сценарий оболочки
  • Необходимо получить последний файл с меткой даты за каждый месяц
  • Помогите мне понять сложную подстановку команд с помощью {} и нескольких `\ ls`
  • фоновый gui-процесс в сценарии оболочки
  • Сценарий оболочки для отображения первой или последней n строк файла
  • Объединение нескольких функций в один скрипт bash
  • Переменная Bash $ {0 ## * /}
  • Как создать каталог, объединив два имени?
  • Перезаписать определенную строку в файле 2 с содержимым файла 1
  • Interesting Posts

    Как использовать uswsusp для режима ожидания / спящего режима с помощью systemd? (Debian)

    Как отправить весь вывод в `logger` в оболочке POSIX?

    overlayfs с большим количеством каталогов

    в чем смысл этой команды sed: `; / @ / {h; s / test / next / g; x; G}`?

    Псевдо-файлы для временных данных

    Приложение WSGI, «AH01630: клиент отказался от конфигурации сервера», но клиент все равно получает страницу

    bash shell – как сделать вложенный цикл без «синтаксической ошибки: операнд ожидаемый»

    NTPDate запускается три раза при загрузке, что приводит к неправильной дате

    Проблема с выходом awk в цикл for

    Что означает это сообщение об ошибке на жестком диске: «Текущий ожидающий секторный счет …»?

    Если вы запускаете автоматические обновления

    Отсутствует файл tar в файле изменений после сборки пакета Debian

    Как почистить все windows tmux?

    Зашифрованный раздел недоступен после возобновления

    у youtube-dl больше нет звука в частичных файлах

    Linux и Unix - лучшая ОС в мире.