Alterando a extensão de vários arquivos no Ubuntu 12.04

3

Como o título diz, como posso alterar a extensão de cada arquivo em um diretório no Ubuntu? Eu vi alguns exemplos usar renomear etc etc, mas eu recebo um erro (não é possível localizar renomeação de pacote) e não é acessível através do apt-get.

Como adicional, eu não conheço o tipo de arquivo original! São dados que foram copiados do sistema de arquivos do Hadoop para a unidade local e eu preciso que todos estejam no formato .txt.

Se isso faz diferença, estou executando o Ubuntu 12.04 no Oracle Virtual Box

Editar: saída de: ls -l / usr / bin / renomear / etc / alternatives / rename

amartin24@ubuntu-amartin24:~/TwitterMining/JSONTweets$ ls -l /usr/bin/*rename* /etc/alternatives/rename
ls: cannot access /etc/alternatives/rename: No such file or directory
-rwxr-xr-x 1 root root 10392 Mar 30  2012 /usr/bin/rename.ul
    
por Andrew Martin 15.08.2013 / 18:58

6 respostas

4

Você poderia cd para o diretório em questão e executar algo semelhante a isto:

find -L . -type f -name "*.oldextension" -print0 | while IFS= read -r -d '' FNAME; do
    mv -- "$FNAME" "${FNAME%.oldextension}.newextension"
done

Ou se os arquivos não tiverem nenhuma extensão:

find -L . -type f -print0 | while IFS= read -r -d '' FNAME; do
    mv -- "$FNAME" "${FNAME%}.newextension"
done

No seu caso, você teria que substituir newextension por txt .

Alguém mais proficiente com o bash pode ser capaz de quebrar isso melhor. Por favor, sinta-se à vontade para editar a minha resposta nesse caso.

Descrição original:

% bl0ck_qu0te%

Fonte:

Bash renomear extensão recursiva - stackoverflow , respondida por aps2012 .

    
por Glutanimate 15.08.2013 / 19:23
5

O comando rename já está instalado, você não precisa adicionar mais nada.

rename considera o código Perl como seu primeiro argumento. Os casos de uso mais concretos de renomeação consistem em uma substituição de expressão regular: s/REGEXP/REPLACEMENT/ . Para remover a extensão existente, substitua tudo a partir do último caractere . .

rename 's/\.[^.]*$/.txt/' /path/to/directory/*

Se os seus arquivos não tiverem extensão (sem . em seu nome), você poderá usar $ (que corresponde ao final do nome do arquivo) como o regexp ou acrescentar .txt ao nome. / p>

rename '$_ = "$_.txt"'  /path/to/directory/*

Isso não altera o conteúdo dos arquivos, apenas os renomeia. Se os seus dados não estiverem no formato desejado, isso é um problema completamente não relacionado.

    
por Gilles 15.08.2013 / 19:59
2

Acho que você pode usar este script simples

rename_ext_script.sh

#!/bin/bash
for file in *
do
  mv -- "${file}" "${file%.*}.txt"
done

este script funciona para ambos os casos com extensão ou sem

    
por lexeek 15.08.2013 / 19:31
1

Solução de GUI

Visão geral

Existe uma ferramenta GUI realmente fácil de usar e poderosa no Ubuntu Software Center para renomear lotes de arquivos, pyRenamer.

Instalação

sudo apt-get install pyrenamer

ou

Screenshots

    
por Kat Amsterdam 15.08.2013 / 20:36
0

Eu tenho este script. Eu sei que não é falso-provar, ou seja, ao manusear arquivos com espaços. É por isso que eu corro desintoxicação no início.

#!/bin/bash
#   detox * 
# uncomment if you want to get rid of spaces and funny characters
    script=$(basename $0)
if  [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
    clear   
    echo "Script for adding an extension to files without extension"
    echo "---------------------------------------------------------"
    echo -e "\n Usage:"
    echo -e "   $script extension\n"
    echo -e "Exampli gratia: \n The command:"
    echo "      $script txt"
    echo -e "   will rename:\n      FileWithoutExtension -> FileWithoutExtension.txt\n"

else
for file in $(ls -p -I '*.*' | grep -v '/$') # excludes direcotires
    do 
    mv -iv "$file" "$file.$1"
    done
fi
    
por xerostomus 12.07.2015 / 06:33
0

Se você tiver muitos arquivos sem extensões (como ./out_1 , ./out_2 , out_3 , ...):

cd YOUR_DIRECTORY_HERE
ls | xargs -i{} mv {} {}.YOUR_EXTENSION_HERE

exemplo

ls | xargs -i{} mv {} {}.md
    
por Jamie 27.10.2015 / 06:55