Batch renomeia usando um .csv

3

Eu tenho 700 diretórios em um local e preciso renomeá-los usando um arquivo .csv, conforme mostrado abaixo:

Eu quero substituir os nomes de Column_A pelas entradas de Column_B.

Column_A           Column_B

 F001               IC500
 F003               IC501
 F006               IC502
 F008               IC503
 ...                ...

Como faço o lote renomear os diretórios?

    
por csheth 13.12.2014 / 18:44

3 respostas

6

Primeiro, exporte seus dados como formato de arquivo .csv , como abaixo:

F001,IC500
F003,IC501
F006,IC502
F008,IC503

Em seguida, execute o script abaixo para renomear esses diretórios para seus novos nomes:

while IFS=, read -a dirName; do
    echo mv -v "/singleFolder/${dirName[0]}" "/singleFolder/${dirName[1]}";
done < /path/to/file.csv

mv -v /singleFolder/F001 /singleFolder/IC500
mv -v /singleFolder/F003 /singleFolder/IC501
mv -v /singleFolder/F006 /singleFolder/IC502
mv -v /singleFolder/F008 /singleFolder/IC503
  • read -a usado para dividir cada linha lida no array com base em IFS , que redefinii para comma , .

  • Cada linha lê na variável dirName .

  • Com ${dirName[0]} , estamos obtendo a primeira parte da linha (coluna A).
  • Com ${dirName[1]} , estamos obtendo a última parte da linha (coluna B).

  • mv comando usado para renomear lá.
    Portanto, com mv -v "/singleFolder/${dirName[0]}" "/singleFolder/${dirName[1]}" , estamos renomeando o nome dos diretórios de columnA para new-name em columnB, que estão localizados no diretório singleFolder .

  • A opção
  • -v mostra o que está sendo feito durante a execução do comando.

Além disso, você pode usar o comando sem tornar o conteúdo da linha como uma matriz como esta:

while IFS=, read -r oldName newName;do
    echo mv -v "/singleFolder/${oldName}" "/singleFolder/${newName}";
done < /path/to/file.csv

Nota: remova o comando echo para executar a renomeação em seus diretórios reais.

    
por αғsнιη 13.12.2014 / 21:17
2

Existe um comando awk para fazer esse trabalho, é claro após expor seus dados como formato de arquivo .csv mencionado em resposta anterior .

Então, depois de exportar para um formato de arquivo .csv, use este comando para renomear facilmente:

awk -F, '{ system("echo mv -v " "/singleFolder/" " /singleFolder/") }' /path/to/file.csv

O conteúdo de será o primeiro ColumnA do arquivo .csv e será o segundo ColumnB com base no separador F do camp do awk, é comma , , que é definido por -F, option.

Como o mesmo que outra resposta, note que remova o comando echo para executar a renomeação em seus diretórios reais.

    
por αғsнιη 31.03.2015 / 11:23
1

Além disso, você pode exportar os dados armazenados no libreoffice como um arquivo .csv com o delimitador guia ou espaço e usar xargs e mv como:

/path/to/singleFolder$ xargs -a /path/to/file.csv -n 2 echo mv -v

Notas:

  1. Você precisa mudar para o diretório singleFolder primeiro (consulte o prompt de comando no comando)
  2. Este método falhará (renomear inesperado) se seus diretórios tiverem um espaço em seus nomes.
  3. Remova echo para ter renomeação real:)
por αғsнιη 31.03.2015 / 11:48