Перемещение файлов в определенные папки на основе имени

Когда путь не начинается с /, он является относительным. Относительный путь обычно относится к текущему рабочему каталогу (, за исключением целей символических ссылок, которые относятся к родителю символической ссылки ). .— запись в любом каталоге, указывающая на себя.

mv -v fickur/./klockor/armbandsur/digital

совпадает с

mv -v fickur/ klockor/armbandsur/digital

Если ваш текущий каталог является первым fickur, в нем нет каталога klockor, так что это не сработает. В родительском каталоге fickurтакже нет каталога klockor. Там будет один в родительском его родительском каталоге, но здесь вам не нужно заходить так далеко, если вы хотите переместить его в подкаталог вашего родительского каталога. armbandsurявляется подкаталогом родителя fickur, так что вы можете просто сделать

mv -v fickur../armbandsur/digital

..здесь является родительским каталогом текущего каталога.

Обратите внимание, что если структура, которую вы описываете выше, включает символические ссылки, например, если fickurявляется не реальным каталогом, а символической ссылкой, тогда ..в каталоге, на который он указывает, может указывать на другой каталог. чем klockor. Кроме того, если второй fickurтакже является символической ссылкой и указывает на относительный путь, то при перемещении в другое место эта ссылка, вероятно, разорвется.

0
26.06.2019, 22:05
1 ответ

Вы можете извлечь числа путем раскрытия параметров. ${f:5:2}выбирает два символа из пятой позиции переменной $f.

#! /bin/bash
for f in aula-??.?.mp4 ; do
    num=${f:5:2}
    mv "$f" Aula"$num"/
done

Чтобы извлечь две цифры из имени файла, если позиция не фиксирована, используйте

#! /bin/bash
for f in *.mp4 ; do
    if [[ $f =~ ([0-9][0-9]) ]] ; then
        num=${BASH_REMATCH[1]}
        mv "$f" Aula"$num"/
    else
        echo "Can't extract number form '$f'" >&2
    fi
done
4
28.01.2020, 02:18

Теги

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