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:

1) It will rename just the file extension (due to use of ${FNAME%.so}.dylib). All the other solutions using ${X/.so/.dylib} are incorrect as they wrongly rename the first occurrence of .so in the filename (e.g. x.so.so is renamed to x.dylib.so, or worse, ./libraries/libTemp.so-1.9.3/libTemp.so is renamed to ./libraries/libTemp.dylib-1.9.3/libTemp.so - an error).

2) It will handle spaces and any other special characters in filenames (except double quotes).

3) It will not change directories or other special files.

4) It will follow symbolic links into subdirectories and links to target files and rename the target file, not the link itself (the default behaviour of find is to process the symbolic link itself, not the file pointed to by the link).

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

Tags