Переместить несколько файлов в несколько папок на основе имен файлов

У меня есть набор файлов в одной папке с именем числовое значение 001001 .. 001002 .. 002001 .. 002002 .. и так далее до 114001 .. 114002, я хочу переместить каждую группу файлов, которые начинаются с того же номера в одну папку, все файлы с 001 в папку 1, все файлы с 110 в папку 110 и т. д., нет проблем при создании папок. У меня проблема с перемещением файлов в подпапках за один шаг, надеюсь, кто-нибудь поможет мне сделай это

1
задан 1 June 2013 в 06:13

2 ответа

Похоже, основной уловкой здесь является перевод имени файла в имя целевой папки. Есть два шага: усечь все, кроме первых трех цифр, и удалить нулевое заполнение. Для этого я выбрал команды sed и $((10# соответственно:

for X in *; do mv $X $((10#$(echo $X | sed -e 's/^\(...\).*/\1/') )); done

Это дает мне незначительные ошибки, такие как mv: cannot move ‘114’ to a subdirectory of itself, ‘114/114’, но, вероятно, вас это не волнует, если ваши файлы перемещаются куда вы хотите, чтобы они пошли.

0
ответ дан 1 June 2013 в 06:13

После одной строки создаст каталоги и переместит сгруппированные файлы:

for f in *; do mkdir ${f:0:3}; mv $f ${f:0:3}/; done

Если у вас уже есть структура каталогов, используйте следующее:

for f in *; do mv $f ${f:0:3}/; done
0
ответ дан 1 June 2013 в 06:13

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

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