
Eu tenho uma sequência de milhares de arquivos nomeados da seguinte forma:
file01-01-01, file01-01-02 etc.
file01-02-01, file01-02-02 etc.
file02-01-01, file02-02-02 etc.
Gostaria de classificar os arquivos em uma pasta com o seguinte nome:
dir01-01 (containing files01-01*)
dir01-02 (containing files01-01*)
dir02-01 (containing files02-01*)
Eu sei que posso reduzir o tempo que levo para fazer isso por meio de uma linha como:
mkdir dir01-01; for f in file01-01*; mv "$f" dir01-01; done
Mas o que foi dito acima apenas reduzirá ligeiramente o tempo de classificação. Como posso automatizar toda a operação de classificação?
Eu sei que preciso fazer algo com let N++ mas não sei como incorporá-lo.
Responder1
Isso deve funcionar. Primeiro, criei arquivos de teste como este:
touch file01-01-01 file01-01-02 file01-02-01 file01-02-02 file02-01-01 file02-02-02
Confirmei que eles existiam usando ls -1
e a saída ficou assim:
file01-01-01
file01-01-02
file01-02-01
file01-02-02
file02-01-01
file02-02-02
Então executei este script Bash no diretório que contém esses arquivos:
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
Feito isso, verifiquei o diretório ls -1
assim e aqui está a saída retornada:
dir01-01
dir01-02
dir02-01
dir02-02
Então os diretórios estão lá, mas para confirmar se os arquivos foram copiados, executei esse ls
comando assim *
: ls -1 *
. E aqui está a saída:
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