У меня проблема со сценарием mv
.
Я создаю папку Test
:
mkdir Test
В этой папке я создаю подпапки:
mkdir -p Pics20 {18..23} / { 01..12}
В папке Test
я создаю много файлов:
коснитесь IMG20 {18..23} {01..12} {01..30 } {01..10} .jpg
Теперь мне нужно переместить все эти файлы IMG в соответствующие подпапки, поэтому я написал сценарий:
для i в 20 {18..23}
do
for j in {01..12}
do
mv IMG20 $ i $ J * Pics20 $ i / $ j
готово
готово
Но я все время получаю сообщение об ошибке:
не может статистика 'IMG202018j *': нет такого файла или каталога
Что не так с моим скриптом ?
Если у вас хорошо организованная файловая структура, подойдет простое переименование
. Если количество объектов может превышать ARG_MAX, предпочтительно чтение из stdin
.
printf %s\\0 IMG*.jpg | \
rename -0 -d 's|IMG(....)(..)(.*)|Pics$1/$2/$3|'
Мне пришлось создать тестовый каталог с «вашим контентом». Таким образом, я сделал рабочий однострочник,
for i in 20{18..23}; do for j in {01..12}; do mv "IMG$i$j"* "Pics$i/$j"; done; done
Вы должны были заменить J на j и добавить точки с запятой для разделения операторов. Также было важно, чтобы имена файлов и каталогов совпадали (посмотрите, как добавить '20')
. Также рекомендуется заключать выражения в двойные кавычки с переменными.