comando para renomear arquivos em massa de acordo com o padrão [closed]

4

Eu tenho um monte de arquivos em um diretório que são nomeados da seguinte forma: ID_OTHER_STUFF.txt Eu gostaria de renomeá-los todos para ID.txt. Isso não é uma duplicata porque não sei como especificar esse padrão.

    
por Walrus the Cat 24.02.2014 / 20:25

4 respostas

12

Usando o perl script prename , que é vinculado a rename nas distribuições baseadas no Debian.

rename -n 's/^([^_]*)_.*/$1.txt/' *_*.txt

Remova o -n quando tiver certeza de que faz o que deseja.

    
por 24.02.2014 / 20:42
2

Você quer usar a expansão de parâmetros do seu shell para manipular o nome, assim:

for file in *.txt
do
  mv $file ${file/_*/}.txt
done

Por exemplo:

$ ls -1
1_foo_bar.txt
2_foo_bar.txt
$ for file in *.txt
for> do
for> mv $file ${file/_*/}.txt
for> done
$ ls -1
1.txt
2.txt

Pesquise Expansão de Parâmetros na página do manual do seu shell para obter mais detalhes sobre ${name/pattern/repl} usage.

    
por 24.02.2014 / 20:45
1

Suponha que seus arquivos sejam:

1_other_stuff.txt 2_other_stuff.txt 3_other_stuff.txt

Você poderia fazer:

$ seq 1 3 | xargs -I ID mv ID_other_stuff.txt ID.txt
    
por 24.02.2014 / 21:01
0

Você deseja mv deles em um loop, script mini bash, existem várias variações. nesta pergunta Renomear arquivos em lote .

    
por 24.02.2014 / 20:37

Tags