Как я могу сортировать изображения с терминала?

У меня много изображений с отметкой времени:

cloudcam-20130825T115716Z.jpg

В той же папке я хотел бы создать папку с именем даты (20130825) и переместить все изображения в эту папку.

Есть ли простой способ сделать это?

1
задан 24 February 2014 в 21:37

3 ответа

Скажите, если это работает (не проверено;)):

for f in `ls cloudcam-????????.jpg`; do
    name=`echo "$f"|sed 's/ -.*//'`
    datedir=`echo "$name"|cut -c 10-17`
    dir="DestinationDirectory/$datedir/$name"
    mkdir -p "$datedir"
    mv "$f" "$datedir"
done

.. он должен копировать все jpg, начиная с cloudcam-, создать каталог для позиций с 10 по 17 имени файла, создать каталог и переместить файл. Поэтому, если у вас есть изображения с другой датой, они будут помещены в другой каталог.

Сохраните его и сделайте скрипт исполняемым с помощью chmod 775.

Попробуйте сначала на копии ваших файлов.

0
ответ дан 24 February 2014 в 21:37

Вы можете использовать цикл for ...

  • сначала запустите тест, чтобы убедиться, что в нем перечислены все, что вам нужно

    for i in cloudcam-20130825*; do echo $i; done
    
  • переместить изображения

    for i in cloudcam-20130825; do mv $i 20130825; done
    
0
ответ дан 24 February 2014 в 21:37

Вы можете переместить все соответствующие файлы с помощью простого глобуса оболочки

$ mkdir 20130825
$ mv cloudcam-20130825*.jpg 20130825

Это будет работать при условии, что нет 1000 файлов (в этом случае может потребоваться «пакетировать» ходы, используя find -exec mv ... + или xargs)

Если у вас есть куча разных дат и вы хотите на лету анализировать имена файлов и создавать каталоги по мере необходимости, вы можете сделать что-то вроде [ 1110]

for f in cloudcam-*.jpg; do d="${f:9:8}"; [[ ! -d "$d" ]] && mkdir "$d"; mv -t "$d" "$f"; done

Предполагается, что имена файлов точно такие, как показано в вашем исходном сообщении, т. Е. Что штамп даты yyyymmdd начинается с символа № 9 - если это не так, то возможны более сложные синтаксические разборы, например использование конструкций bash, таких как ${f#front} и ${f%%back}, для удаления ведущих и конечных подстрок.

0
ответ дан 24 February 2014 в 21:37

Другие вопросы по тегам:

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