Извините, если заголовок вопроса недостаточно информативен. Не стесняйтесь предлагать лучший вариант.find, xargs: выполнить цепочку команд для каждого файла
Я хочу выполнить следующую задачу: В каталоге у меня есть несколько файлов, которые являются фотографиями в формате JPEG. Я хочу извлечь из EXIF даты, когда эти фотографии были сделаны, создать новый каталог для каждой даты и перенести файл в соответствующий каталог.
(дата и время EXIF имеют формат YYYY:MM:DD hh:mm:ss
, и я хочу, имена каталогов, которые будут отформатированы как YYYY-MM-DD
, поэтому я использую СЭД)
Я вроде знаю, как выполнить каждую из этих задач по отдельности, но не смогли собрать их вместе. Я потратил некоторое время на изучение того, как выполнять команды с использованием find
с -exec
или xargs
, но до сих пор не понял, как правильно цепочки.
Наконец-то я смог выполнить свою задачу с помощью двух команд:
find . -name '*.jpg' -exec sh -c "identify -format %[exif:DateTimeOriginal] {}
| sed 's/ [0-9:]*//; s/:/-/g' | xargs mkdir -p" \;
find . -name '*.jpg' -exec sh -c "identify -format %[exif:DateTimeOriginal] {}
| sed 's/ [0-9:]*//; s/:/-/g; s/$/\//' | xargs mv {}" \;
Но я не люблю дублирования, и я не люблю -exec sh -c
. Есть ли правильный способ сделать это в одной строке и без использования -exec sh -c
?