Renomear arquivos em subdiretorios [RESOLVIDO]

1. Renomear arquivos em subdiretorios [RESOLVIDO]

Alexandre Del Col
alexandredelcol

(usa Outra)

Enviado em 01/07/2017 - 20:20h

Fala Pessoal,

Sou iniciante em shell script e preciso de ajuda com um problema.Tenho uma pasta raiz com várias subpastas dentro, e dentro de cada subpasta desta tenho um arquivo.txt, exemplo:

/home/Documentos/Pasta1/arquivo.txt
/home/Documentos/Pasta2/arquivo.txt
/home/Documentos/Pasta3/arquivo.txt
/home/Documentos/Pasta4/arquivo.txt
/home/Documentos/Pasta5/arquivo.txt
/home/Documentos/Pasta6/arquivo.txt
/home/Documentos/Pasta7/arquivo.txt

Preciso gerar um shell script que o usuário informa o diretório principal, no caso acima /home/Documentos, e o sricpt percorra estas subpastas e renome os arquivos txt conforme abaixo

/home/Documentos/Pasta1/pasta1.txt
/home/Documentos/Pasta2/Pasta2.txt
/home/Documentos/Pasta3/Pasta3.txt
/home/Documentos/Pasta4/Pasta4.txt
/home/Documentos/Pasta5/Pasta5.txt
/home/Documentos/Pasta6/Pasta6.txt
/home/Documentos/Pasta7/Pasta7.txt

alguém sabe como faço isso?

Desde já valeu pela força


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/07/2017 - 21:55h

Veja se assim resolve:
rename -v 's:(/[^/]*)/[^/]*$:$1$1.txt:' /home/Documentos/*/*.txt 

Obs.: troque o "-v" por "-n" se quiser ver o que acontece sem alterar nada.

3. Re: Renomear arquivos em subdiretorios

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/07/2017 - 22:07h

alexandredelcol escreveu:

Fala Pessoal,

Sou iniciante em shell script e preciso de ajuda com um problema.Tenho uma pasta raiz com várias subpastas dentro, e dentro de cada subpasta desta tenho um arquivo.txt, exemplo:

/home/Documentos/Pasta1/arquivo.txt
/home/Documentos/Pasta2/arquivo.txt
/home/Documentos/Pasta3/arquivo.txt
/home/Documentos/Pasta4/arquivo.txt
/home/Documentos/Pasta5/arquivo.txt
/home/Documentos/Pasta6/arquivo.txt
/home/Documentos/Pasta7/arquivo.txt

Preciso gerar um shell script que o usuário informa o diretório principal, no caso acima /home/Documentos, e o sricpt percorra estas subpastas e renome os arquivos txt conforme abaixo

/home/Documentos/Pasta1/pasta1.txt
/home/Documentos/Pasta2/Pasta2.txt
/home/Documentos/Pasta3/Pasta3.txt
/home/Documentos/Pasta4/Pasta4.txt
/home/Documentos/Pasta5/Pasta5.txt
/home/Documentos/Pasta6/Pasta6.txt
/home/Documentos/Pasta7/Pasta7.txt

alguém sabe como faço isso?

Desde já valeu pela força


Boa noite Alexandre.
Segue:
for ARQ in $(find Documents/ -type f -iname "*.txt");do
PASTA=$(cut -d"/" -f2 <<< "$ARQ"); ARQUIVO=$(cut -d"/" -f3 <<< "$ARQ")
rename -n 's/'$ARQUIVO'/'${PASTA,,}'.txt/' $ARQ
done

Ou

rename -n 's/([[:alpha:]]+[0-9]+)\/([[:alpha:]]+\.txt)/$1\/\L$1.txt/' Documents/*/*.txt



OBS.:
O "-n" SIMULA a alteração, tire o "-n" para EFETIVAR


ATt.:
Marcelo Oliver



4. Re: Renomear arquivos em subdiretorios [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 02/07/2017 - 14:35h


find /home/Documentos/ -type f -iname "arquivo.txt" | while read LINE; do mv "$LINE" "$(dirname $LINE)/$(dirname $LINE | awk -F"/" '{print $NF}').txt"; done



5. Re: Renomear arquivos em subdiretorios

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/07/2017 - 15:30h

alexandredelcol escreveu:

Fala Pessoal,

Sou iniciante em shell script e preciso de ajuda com um problema.Tenho uma pasta raiz com várias subpastas dentro, e dentro de cada subpasta desta tenho um arquivo.txt, exemplo:

/home/Documentos/Pasta1/arquivo.txt
/home/Documentos/Pasta2/arquivo.txt
/home/Documentos/Pasta3/arquivo.txt
/home/Documentos/Pasta4/arquivo.txt
/home/Documentos/Pasta5/arquivo.txt
/home/Documentos/Pasta6/arquivo.txt
/home/Documentos/Pasta7/arquivo.txt

Preciso gerar um shell script que o usuário informa o diretório principal, no caso acima /home/Documentos, e o sricpt percorra estas subpastas e renome os arquivos txt conforme abaixo

/home/Documentos/Pasta1/pasta1.txt
/home/Documentos/Pasta2/Pasta2.txt
/home/Documentos/Pasta3/Pasta3.txt
/home/Documentos/Pasta4/Pasta4.txt
/home/Documentos/Pasta5/Pasta5.txt
/home/Documentos/Pasta6/Pasta6.txt
/home/Documentos/Pasta7/Pasta7.txt

alguém sabe como faço isso?

Desde já valeu pela força


Se for só isso mesmo, segue mais um exemplo (altere-o se necessário, e faça um teste antes):
#!/bin/bash

dir="$1" # Diretorio principal
file="$2" # Arquivo a ser renomeado
current="$(pwd)" # Salva diretorio atual

if [ ! -d "$dir" ]; then echo "Diretorio nao existe!"; exit 1; fi
if [ -z "$file" ]; then echo "Digite o nome do arquivo!"; exit 1; fi

cd "$dir"
for i in *; do
if [ -d "$i" ]
then
if [ -e "$i/$file" ]; then mv "$i/$file" "$i/${i}.txt"; fi
fi
done

cd "$current"; exit 0


Salve-o com um nome qualquer e, para usá-lo: ./nome_do_script "diretorio_principal" "arquivo_para_renomear" (use aspas para especificar os parâmetros, especialmente se os nomes tiverem espaços)

Não entendi exatamente se é só isso, mas o script acima recebe dois parâmetros (ex: ./script "/home/Documentos" "arquivo.txt"), um informando o diretório principal e o outro, informando o nome do arquivo que será renomeado.

Então, o script varre os subdiretórios existentes e, se o arquivo especificado no segundo parâmetro existir dentro deste diretório, ele renomeia o arquivo com o nome da pasta onde ele está.


OBSEVAÇÕES:
#1 - O script só varre os diretórios imediatamente após (um nível acima) o diretório principal; se houver mais diretórios dentro destes diretórios, eles serão ignorados (já que, ao acessar um subdiretório do diretório principal, o script apenas procura pelo arquivo especificado no segundo parâmetro);

Se tiver que varrer todos os subdiretórios do diretório principal, e não apenas os imediatamente acima dele (como faz o meu script), avise, por favor.

#2 - Note também que fiz o script para trabalhar exatamente com o exemplo que você propôs; para executá-lo, não esqueça de permitir a execução dele (chmod +x script)



6. Renomear arquivos em subdiretorios

Alexandre Del Col
alexandredelcol

(usa Outra)

Enviado em 04/07/2017 - 08:37h

Valeu pessoal, li as dicas desse tópico e consegui resolver o problema :D


7. Re: Renomear arquivos em subdiretorios [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/07/2017 - 10:16h

alexandredelcol escreveu:

Valeu pessoal, li as dicas desse tópico e consegui resolver o problema :D


Marque a melhor resposta. Isso ajuda a quem ajudou e a outros com a mesma dúvida.


8. Renomear arquivos em subdiretorios

Alexandre Del Col
alexandredelcol

(usa Outra)

Enviado em 04/07/2017 - 10:19h

PauloHAC escreveu:

Veja se assim resolve:
rename -v 's:(/[^/]*)/[^/]*$:$1$1.txt:' /home/Documentos/*/*.txt 

Obs.: troque o "-v" por "-n" se quiser ver o que acontece sem alterar nada.


Usei este script pra resolver o problema, funcionou perfeitamente







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts