-1

У меня есть последовательность из 1000 файлов, названных следующим образом:

file01-01-01, file01-01-02 etc.
file01-02-01, file01-02-02 etc.
file02-01-01, file02-02-02 etc.

Я хотел бы отсортировать файлы в папку с именем следующим образом:

dir01-01 (containing files01-01*)
dir01-02 (containing files01-01*)
dir02-01 (containing files02-01*)

Я знаю, что могу сократить время, необходимое для этого, с помощью строки вроде:

mkdir dir01-01; for f in file01-01*; mv "$f" dir01-01; done

Но приведенное выше лишь немного сократит время сортировки, как я могу автоматизировать всю операцию сортировки?

Я знаю, что нужно что-то делать с let N ++, но не знаю, как это сделать.

1 ответ1

0

Это должно работать. Сначала я создал тестовые файлы так:

touch file01-01-01 file01-01-02 file01-02-01 file01-02-02 file02-01-01 file02-02-02

Подтвердили, что они существуют, используя ls -1 и результат выглядел так:

file01-01-01
file01-01-02
file01-02-01
file01-02-02
file02-01-01
file02-02-02

Затем я запустил этот скрипт Bash в каталоге, содержащем эти файлы:

find . -type f |\
  while read FULL_FILE_PATH
  do
    FIRST_TWO_DIGITS=$(echo "${FULL_FILE_PATH}" | grep -Eo '[[:digit:]]{2}-[[:digit:]]{2}');
    if [ ! -z "$FIRST_TWO_DIGITS" -a "$FIRST_TWO_DIGITS" != " " ]; then
      DIR=dir"${FIRST_TWO_DIGITS}";
      mkdir -p "${DIR}";
      mv "${FULL_FILE_PATH}" "${DIR}";
    fi
  done

После этого я проверил каталог с помощью ls -1 вот так и вот возвращенный результат:

dir01-01
dir01-02
dir02-01
dir02-02

Таким образом, каталоги есть, но для подтверждения того, что файлы были скопированы, я запустил команду ls с * например: ls -1 * . И вот вывод:

dir01-01:
file01-01-01
file01-01-02

dir01-02:
file01-02-01
file01-02-02

dir02-01:
file02-01-01

dir02-02:
file02-02-02

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