Atualiza os nomes dos arquivos em um único diretório com prefixo mais letra

1

Eu encontrei vários métodos para adicionar um prefixo simples em arquivos em uma pasta no Linux, por exemplo

for FILENAME in *; do mv $FILENAME REF_$FILENAME; done 

( link )

Eu gostaria de fazer isso, mas com o REF mudando para cada arquivo REFa, REFb, REFc, ... Isso seria executado manualmente em um único diretório, porque o REF seria diferente para cada um.

Agradecemos antecipadamente porque o vencedor literalmente me poupará horas de entrada manual de dados; -)

    
por Matthew 04.07.2017 / 11:09

2 respostas

0

A resposta rápida e suja seria a seguinte:

array=('echo {a..z}{a..z}{a..z}');i=0; for FILENAME in *; do  mv $FILENAME REF${array[i]}_$FILENAME; i=$(($i+1)); done

Mas eu prefiro fazer isso como um script que você pode executar - é mais fácil de manter e descrever

array=('echo {a..z}{a..z}{a..z}')
i=0 
for FILENAME in *
do 
    mv $FILENAME REF${array[i]}_$FILENAME 
    i=$(($i+1)) 
done

A primeira linha carrega uma sequência de letras de 3 dígitos, iniciando aaa e prosseguindo até zzz. Você pode diminuir ou aumentar o tamanho dessa matriz aumentando ou diminuindo o número de {a..z} - e você pode substituí-la por letras maiúsculas ou outra sequência simples.

i é um contador que nós incrementamos para que possamos obter uma sequência única para cada valor REF.

Observo que não gosto do bit de código "FILENAME in *", porque ele não funciona bem com os subdiretórios. Eu estaria inclinado a substituir essa linha com

for FILENAME in 'find . -type f'

para lidar com arquivos, incluindo subdiretórios ou

for FILENAME in 'find . -maxdepth 1 -type f'

para arquivos somente no diretório atual (ou seja, não recursivo e ignorando diretórios)

    
por 04.07.2017 / 12:01
0

Você poderia criar um comando adaptado para esse problema específico, tenho certeza de que outras respostas farão isso. Minha resposta é mais geral , talvez ela se encaixe em você.

vidir (provavelmente de moreutils package) permite que você edite nomes de arquivos em um editor de texto. Para escolher um editor, defina a variável EDITOR .

Dessa forma, você pode usar muitos recursos de vi , emacs ou qualquer editor que você usa. Leia man vidir para aprender como fazê-lo funcionar com subdiretórios, se precisar.

Este é um exemplo de como ficaria no seu editor:

1   ./AdbeRdr9.5.5-1_i486linux_enu.bin
2   ./AdobeAIRInstaller.bin
3   ./Dir1
4   ./Dir10
5   ./Dir2
6   ./bashfile.sh

Os números identificam arquivos nesta instância específica de vidir , eles são seguidos por guias. Você não pode tocar nesses números e guias, a menos que saiba o que está fazendo. As alterações nos nomes dos arquivos são aplicadas quando você salva o texto.

Se você tem medo de haver um nome de arquivo com uma guia ou um caractere de nova linha em algum lugar, isso quebrará algo e manterá a calma. Até onde eu saiba, vidir se recusará a trabalhar com ele em primeiro lugar.

Agora, a melhor parte. O editor também pode trabalhar fora do console, por isso é possível:

  1. Invoque EDITOR=kate vidir , isso executará kate editor.
  2. Copie todo o texto e cole no LibreOffice Calc; você terá duas colunas.
  3. Manipule os nomes usando ferramentas fornecidas pelo Calc para obter a saída como duas colunas: números e novos nomes.
  4. Copie essas duas colunas de volta para kate e substitua o texto antigo.
  5. Salve o arquivo de texto.

Isso é muito poderoso. Apagar linhas e salvar o arquivo de texto irá apagar os arquivos. Trocar números fará com que os arquivos trocem nomes (ou até mesmo caminhos, se você trabalhar com subdiretórios). Com grande poder, vem uma grande responsabilidade. Você provavelmente deve experimentar primeiro arquivos e diretórios descartáveis.

    
por 04.07.2017 / 12:28