dark777
(usa Debian)
Enviado em 31/01/2020 - 15:54h
marimbondo2 escreveu:
Faça as modificações necessárias.
Eu atualizei o script, como mencionei, optei por uma segunda passagem do Sed para limpar o excesso de ___ nos nomes. NA VERDADE, dá sim para colocar tudo em um só comando do Sed. É só especificar cada comando que quer executar no text com '-e' antes..
Mas cuidado: por exemplo: { sed -e 's/ - /_/g' -e 's/ -/_/g' -e 's/ /_/g' } é uma sintaxe que você tem que tomar cuidado, pois nesse caso o texto passará pelas três expressões, mas a cada passagem ele terá sido modificado pela expressão anterior já..
Então você pode ir aperfeiçoando isso..
Neste caso específico, também deixei de usar '\s' para usar um simples espaço em branco ' '. Isso se deve ao fato que '\s' dentro de uma lista '[..]', é lido como caracteres separados, ou seja, ele lê '\' e 's'.. Então '\s' só funciona como 'non-breaking space' fora de listas , e na primeira expressão do comando do Sed ( 's/\sESTA/ /g' ) , pois a segunda parte da expressão não é uma expressão regular ( 's/\s/ ESTA/g' ). OK?
Como falei, fiz modificações naquele comando do Sed por que estava dando alguns probleminhas e conflitos com a expressão do Sed original..
Fiz algumas alterações no comando sed e aparentemente esta funcionando, pois coloquei também para retirar tabs e espaços no início e fim do nome.
#!/bin/bash
#Renomeia apenas diretórios
# Uso: 1. entre no diretório pai que contém os dirs alvos
#
# 2. se quiser mover os diretórios para outra pasta:
# $ rendir-3 /OUTRA/PASTA/DESTINO #use caminho completo!
#
# do contrário, ele moverá os arquivos para a mesma pasta somente renomeando os mesmos
#ref:
https://www.vivaolinux.com.br/topico/Shell-Script/Erro-ao-renomear-muitas-pastasAJUDA/?pagina=1
#
#bash$ mkdir " Nova pasta.DRift - asdf java "
#bash$ mkdir " Nova pasta.DRift- Asdf java "
#bash$ mkdir " Nova pasta.DRift - asdf Java "
#bash$ mkdir " Nova pasta.DRift -Asdf Java "
#bash$ mkdir " Nova pasta.DRift- asdf jAvA "
#bash$ mkdir " Nova pasta.DRift- Asdf jAvA "
#bash$ mkdir " Nova pasta.DRift -asdf JaVa "
#lista apenas diretórios
#DIRECTORY="$(ls -d */)"
#se não for especificado diretório de destino como primeiro argumento
#do script, usar o dir atual
IFS='
'
TODIR="${1:-.}"
#se não houver, crie o diretório de destino
mkdir -p "${TODIR}" || exit 1
#criar lista de diretórios alvos
printf '%s\n' */ |
#enquanto lê a lista:
while read X; do
#processa o nome do diretório
#remove espaço em branco no início do nome e no fim do nome "s/^\s*//g;s/\s*$//g;"
#substitui ponto por underline "s/\./_/g;"
#substitui traço com espaço em branco por underline a direita e a esquerda "s/-\s/_/g;s/\s-/_/g;"
#substitui espaço em branco por underline "s/\s/_/g;"
#substitui dois ou mais underlines por um underline "s/__*/_/g;"
#remove barra no fim do nome "s/\/$//g;"
#remove um ou dois underlines no inicio e fim do nome "s/^__*//g;s/__*$//g;"
#PS: para que seja removido algum underline no final do nome é nescessário retirar a barra no fim do nome "s/\/$//g;s/^__*//g;s/__*$//g;"
Y="$(sed -E 's/^\s*//g;s/\s*$//g;s/\./_/g;s/-\s/_/g;s/\s-/_/g;s/\s/_/g;s/__*/_/g;s/\/$//g;s/^__*//g;s/__*$//g;' <<<"${X}")"
#move e renomeia dirs
mv "${X}" "${Y}"
if [ $? -ne 0 ]; then
printf "\033[37;1m\n\"%s\" \033[m<-\033[31;1m nothing done.!!\n\n\033[m" "${X/\//}" 1>&2
else
printf "\033[36;1m\nRenamed \033[31;1m\"\033[m%s\033[31;1m\"\033[36;1m to \033[31;1m\"\033[33;1m%s\033[31;1m\" \033[36;1msuccessfully\033[m\n\n" "${X/\//}" "${Y/\//}"
fi
done
#Renamed " Nova pasta.DRift - asdf java " to "Nova_pasta_DRift_asdf_java" successfully
#Renamed " Nova pasta.DRift- Asdf java " to "Nova_pasta_DRift_Asdf_java" successfully
#Renamed " Nova pasta.DRift - asdf Java " to "Nova_pasta_DRift_asdf_Java" successfully
#Renamed " Nova pasta.DRift -Asdf Java " to "Nova_pasta_DRift_Asdf_Java" successfully
#Renamed " Nova pasta.DRift- asdf jAvA " to "Nova_pasta_DRift_asdf_jAvA" successfully
#Renamed " Nova pasta.DRift- Asdf jAvA " to "Nova_pasta_DRift_Asdf_jAvA" successfully
#Renamed " Nova pasta.DRift -asdf JaVa " to "Nova_pasta_DRift_asdf_JaVa" successfully
#Renamed " Nova pasta.DRift -Asdf JaVa " to "Nova_pasta_DRift_Asdf_JaVa" successfully
wiki.anon