
У меня есть последовательность из тысяч файлов, названных следующим образом:
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
Это должно работать. Сначала я создал тестовые файлы, например:
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