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)