Alterando uma extensão de arquivo múltiplo usando o comando de linha única

1

Eu tenho alguns arquivos cujos nomes contêm várias extensões:

$ ls -r
File1_345.R.12345
File1_3.234.R.6789
File1_2345.R.2345
File1_12345.R.12345
$

Quero renomeá-los para remover todas as extensões existentes e substituí-las por .txt . A saída deve estar abaixo:

$ ls -r
File1_345.txt
File1_3.txt
File1_2345.txt
File1_12345.txt

É possível usar o comando find e xargs?

    
por Aashish Raj 13.08.2018 / 22:23

2 respostas

7

Se você deseja remover todas as extensões (tudo após o primeiro ponto ) de cada nome de arquivo, faça

$ for f in *
do
    mv -- "$f" "${f%%.*}.txt"
done

Claro, se você realmente quiser fazer isso em uma linha, basta recolher o acima para

$ for f in *; do mv -- "$f" "${f%%.*}.txt"; done
    
por 13.08.2018 / 23:20
1

Você pode fazer isso com o GNU Parallel:

find ... | parallel mv {} '{=s/\..*//=}'.txt
    
por 14.08.2018 / 23:50