Скрипт для изменения иерархии папок с фотографиями

Я ищу сценарий для быстрого изменения существующей структуры папок в моей synology nas с использованием ssh с YYYY / MM / DD / на YYYY-MM-DD /, поэтому вложен в плоский, но изо всех сил пытается найти один или какие-либо примеры, вероятно, из-за меня не ища правильной терминологии.

Я начал использовать exiftool и перемещал каждый элемент, но сборник требует времени.

например, image01, который в настоящее время находится, скажем, в 2020/01/01 / images01.jpg, необходимо переместить в 2020-01-01 / images.jpg

файлы изображений и видео в настоящее время находятся только в папках дня.


person Tim    schedule 09.05.2020    source источник


Ответы (1)


Например, вы можете сделать это с помощью этой команды:

find . -mindepth 3 -type d |awk -F"/" 'system("mv " $2"/"$3"/"$4" "$2"-"$3"-"$4" && rmdir "$2"/"$3" && rmdir "$2" 2>/dev/null")'

Пример структуры входной папки:

./2020/06/12/img1.jpg
./2020/06/12/file2.mpg
./2020/05/10/img2.jpg
./2020/05/10/img1.jpg

Результат:

./2020-05-10/img1.jpg
./2020-05-10/img2.jpg
./2020-06-12/img1.jpg
./2020-06-12/file2.mpg

Объяснение:

find . searches in the current directory
-mindepth 3 only searches at level 3 nesting
-type d only search for directories
| creates a pipe, directing the find result to AWK
-F"/" sets the AWK field separator to /
system command is executed for each line which transfers files to the new directory and deletes unnecessary old directories
&& do next command only when previous ones were successful
2>/dev/null directs stderr to the void so that you won't see any errors trying to delete a non-empty "year" directory

Вы не можете использовать rm -rf, потому что каталог года все еще может содержать другие каталоги, поэтому используйте rmdir дважды.

Вы можете разрешить перенаправление stderr более элегантно, проверив, является ли каталог года пустым перед его удалением, я не ставлю этот тест, чтобы не затенять идею действия без необходимости.

person Slawomir Dziuba    schedule 09.05.2020