У меня много изображений с отметкой времени:
cloudcam-20130825T115716Z.jpg
В той же папке я хотел бы создать папку с именем даты (20130825
) и переместить все изображения в эту папку.
Есть ли простой способ сделать это?
Скажите, если это работает (не проверено;)):
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.
Попробуйте сначала на копии ваших файлов.
Вы можете использовать цикл for ...
сначала запустите тест, чтобы убедиться, что в нем перечислены все, что вам нужно
for i in cloudcam-20130825*; do echo $i; done
переместить изображения
for i in cloudcam-20130825; do mv $i 20130825; done
Вы можете переместить все соответствующие файлы с помощью простого глобуса оболочки
$ 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}
, для удаления ведущих и конечных подстрок.