Classifique arquivos csv em pastas diferentes de acordo com o nome deles

4

Eu tenho muitos arquivos csv que eu quero classificar de acordo com o nome do arquivo deles em pastas diferentes.

  1. Os arquivos chamados *lefto.csv serão salvos em uma pasta chamada lefto
  2. Os arquivos chamados *righto.csv serão salvos em uma pasta chamada right
  3. Os arquivos chamados *sagital.csv serão salvos em uma pasta chamada sagittal
  4. Arquivos com nomes que não obedecem a nenhuma condição anterior serão salvos em uma pasta chamada animals

Até agora tenho usado o comando mv , mas gostaria de fazer um loop.

    
por Soniasalme 02.03.2018 / 15:10

2 respostas

5

Parece que uma declaração case seria apropriada aqui. Isso deve funcionar em bash ou outros shells parecidos com Bourne:

for f in *.csv; do 
  case "${f%.csv}" in 
    *.lefto) echo mv -- "$f" lefto/
    ;; 
    *.righto) echo mv -- "$f" righto/
    ;; 
    *.sagital) echo mv -- "$f" sagital/
    ;; 
    *) echo mv -- "$f" animals/
    ;; 
  esac
done

Teste:

touch foo.lefto.csv bar.righto.csv baz.csv foo.sagital.csv

então

mv -- bar.righto.csv righto/
mv -- baz.csv animals/
mv -- foo.lefto.csv lefto/
mv -- foo.sagital.csv sagital/

Remova o echo s assim que estiver convencido de que está fazendo o que deseja

    
por steeldriver 02.03.2018 / 16:04
5

Você poderia fazer algo assim:

mkdir -p lefto righto sagital
for prefix in lefto righto sagital; do
    mv -- *"$prefix.csv" $prefix/
done 
mv -- *.csv animals/
    
por terdon 02.03.2018 / 16:06