-2

У меня много файлов от b_in00 до b_in79, и мне нужно переместить эти файлы в папки с 00 по 79, с b_in00 в папку 00 и так далее. Не могли бы вы вести меня?

2 ответа2

2

В Баш:

mkdir {0,1,2,3,4,5,6,7}{0,1,2,3,4,5,6,7,8,9} 80 
for i in `seq -w 0 80`; do mv b_in${i} $i; done

-w означает применить отступ слева, так что 1 становится 01

В качестве альтернативы:

mkdir {00..80}
for i in {00..80}; do mv b_in$i $i; done

Или даже

for i in {00..80}; do mkdir $i; mv b_$i $i;done
1

Есть много способов сделать это. Лично я бы использовал скрипт оболочки.

В bash это будет выглядеть так:

i=0
while [[ $i -le 80 ]]
do number=$(printf %02i $i)
    mkdir $number &&
    mv b_in$number $number
    i=$((i+1))
done

или однострочная версия

i=0; while [[ $i -le 80 ]]; do number=$(printf %02i $i); mkdir $number && mv b_in $number; i=$((i+1)); done

Альтернативный подход состоит в том, чтобы взять все файлы, убрать начальный b_in и использовать оставшуюся строку в качестве имени каталога:

for filename in b_in*
do
    dirname=${filename#b_in}
    mkdir $dirname &&
    mv $filename $dirname
done

Что может пойти не так, и я предполагаю, что вы проверите перед запуском этого скрипта:

  • В именах файлов нет пробелов или специальных символов
  • Каталоги могут быть созданы и не конфликтуют с существующими файлами или каталогами

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .