Renomear arquivos no grupo

1

Eu tenho estrutura de pastas e arquivos como


Folder/1/fileNameOne.ext
Folder/2/fileNameTwo.ext
Folder/3/fileNameThree.ext
...

Como posso renomear os arquivos para que a saída se torne


Folder/1_fileNameOne.ext
Folder/2_fileNameTwo.ext
Folder/3_fileNameThree.ext
...

Como isso pode ser alcançado no shell do linux?

    
por TheKojuEffect 11.04.2013 / 17:20

1 resposta

4

Aqui está um script bash que faz isso:

Nota: Este script não funciona se algum dos nomes de arquivo contiver espaços.

#! /bin/bash

# Only go through the directories in the current directory.
for dir in $(find ./ -type d)
do
    # Remove the first two characters. 
    # Initially, $dir = "./directory_name".
    # After this step, $dir = "directory_name".
    dir="${dir:2}"

    # Skip if $dir is empty. Only happens when $dir = "./" initially.
    if [ ! $dir ]
    then
        continue
    fi

    # Go through all the files in the directory.
    for file in $(ls -d $dir/*)
    do
        # Replace / with _
        # For example, if $file = "dir/filename", then $new_file = "dir_filename"
        # where $dir = dir
        new_file="${file/\//_}"

        # Move the file.
        mv $file $new_file
    done

    # Remove the directory.
    rm -rf $dir
done
  • Copie e cole o script em um arquivo.
  • Torne-o executável usando
chmod +x file_name
  • Mova o script para o diretório de destino. No seu caso, isso deve estar dentro de Folder/ .
  • Execute o script usando ./file_name .
por green 11.04.2013 / 17:44