awk 'NR > 1 { print $1, $2 }' list.csv |
while read -r prefix group; do
find . -type f -name "$prefix*" -exec sh -c '
group="$1"; shift
mkdir -p "$group"
for name do echo mv "$name" "$group"; done' sh "$group" {} +
done
Isso usaria awk
para alimentar um loop while com os prefixos e nomes de grupos (ignorando o cabeçalho do arquivo da lista). Isso pressupõe que todos os prefixos e nomes de grupos não possuem espaços ou tabulações neles.
O loop while chama find
para localizar todos os arquivos regulares dentro ou abaixo do diretório atual, que possuem nomes começando com o prefixo especificado. Para todos esses arquivos, o seguinte script de shell curto é chamado:
group="$1"
shift
mkdir -p "$group"
for name do
echo mv "$name" "$group"
done
Este script espera que o nome do grupo seja o primeiro argumento na linha de comando, e o resto dos argumentos sejam nomes de caminho de arquivos para serem movidos para o diretório do grupo.
O script cria um diretório de grupos no diretório de trabalho atual, se ainda não existir, e, em seguida, faz um loop nos nomes de caminho fornecidos, movendo cada arquivo para o lugar. Nenhuma verificação é feita para se os arquivos são sobrescritos.
O echo
protege o mv
da execução real. Execute o código com echo
no lugar para ter certeza de que funciona, depois remova o echo
.