Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

1. Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Lucas
lucasschvantes

(usa CentOS)

Enviado em 22/01/2015 - 16:22h

Boa tarde

Pessoal meu primeiro post aqui no viva linux, já acompanho o site a quase dois anos, sempre achei o que precisava nos de mais tópicos.

Porém, não achei algo significativo para minha questão:

Diretórios com # no inicio do nome, ex: #compras, #clienteTal #modaPegou


Vi alguns script que tiram espaços, ou "-", porém não quis rodar no servidor para não gerar um caos.


Se alguém souber e poder me ajudar, fico no aguardo.

Abs


  


2. Re: Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Carlos APC
Carlos_Cunha

(usa Linux Mint)

Enviado em 22/01/2015 - 16:41h

Pode executar o comando, não precis de "script" ....

Comando:
sed -i 's/^#//' 01.txt 


Exemplo de uso:


$ cat 01.txt

#badanha
#pato

$ sed -i 's/^#//' 01.txt

cat 01.txt

badanha
pato



#-------------------------------------------------------------------------------------#

"Linux é algo que me fez ter Gosto pela Informática, se tornou um Vicio" - Carlos A. P. Cunha


3. Re: Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Lucas
lucasschvantes

(usa CentOS)

Enviado em 22/01/2015 - 16:53h

Boa tarde

No caso, são inúmeras pastas e não textos dentro de um arquivo txt.

Exemplo:

ls -lh criacao

#cliente
#cliente2
#cliente3
#cliente4
#cliente5

Desculpe a "verdise" mais é possível, tirar o # na frente do nome das pastas, ou arquivos, tentei com o método que tu passou e não foi possível.

Fico no aguardo, abs!


4. Re: Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/01/2015 - 17:26h

lucasschvantes escreveu:

Porém, não achei algo significativo para minha questão:

Diretórios com # no inicio do nome, ex: #compras, #clienteTal #modaPegou

Vi alguns script que tiram espaços, ou "-", porém não quis rodar no servidor para não gerar um caos.

Abs


Renomear os diretórios removendo a cerquilha do inicio dos nomes?

Usar comando 'rename' do pacote util-linux seria o caminho mais simples:

/usr/bin/rename \# '' \#* 


Contudo, algumas distribuições utilizam o script perl de mesmo nome e cuja sintaxe seria:

rename 's/^#//' \#* 


Se você não tiver nenhum dos dois, ainda pode utilizar apenas o 'mv':

for f in \#*; do mv $f ${f###}; done 


Crie diretórios fake para testar antes de implementar e/ou tenha um backup.



5. Re: Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Carlos APC
Carlos_Cunha

(usa Linux Mint)

Enviado em 22/01/2015 - 18:04h

A bom, não percebi que eram direotiros....

Bom mas testei com o que o amigo disse ali:

for f in \#*; do mv $f ${f###}; done 

E funciona perfeitamente!!

Ate tenho uma pergunta para ele hehe
O por que desse "###" dentro do for ???

Abraço

#-------------------------------------------------------------------------------------#

"Linux é algo que me fez ter Gosto pela Informática, se tornou um Vicio" - Carlos A. P. Cunha


6. Re: Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/01/2015 - 20:08h

Preto_Cunha escreveu:

A bom, não percebi que eram direotiros....

Bom mas testei com o que o amigo disse ali:

for f in \#*; do mv $f ${f###}; done 

E funciona perfeitamente!!

Ate tenho uma pergunta para ele hehe
O por que desse "###" dentro do for ???


Talvez tenha ficado esquisito a sequência de três cerquilhas ...

As duas primeiras são expansões de parâmetros em variáveis para remover prefixos, no manual do bash você encontrará uma referência assim:

${parameter##word} 


A terceira cerquilha é apenas o prefixo que desejamos remover. Se todos os diretórios tivessem o prefixo "#HashTag_", o comando ficaria:

mv $f ${f###HashTag_} 


Esta mesma sintaxe funciona no ksh. Já no zsh, precisa escapar a cerquilha, que afinal, até ficaria mais legível ... :

mv $f ${f##\#Hastag_} 


Voltando ao caso original e, embora menos performático neste caso, utilizar o 'sed' seria uma possível solução:

for f in \#*; do mv $f $(sed 's/^#//' <<< "$f" ); done 


E até apelar para as extensões GNU do sed:

sed 's/^#\(.*\)$/mv "&" \1/e' <(ls -d \#*) 



Abraço

#-------------------------------------------------------------------------------------#

"Linux é algo que me fez ter Gosto pela Informática, se tornou um Vicio" - Carlos A. P. Cunha




7. Re: Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Lucas
lucasschvantes

(usa CentOS)

Enviado em 23/01/2015 - 13:02h

Boa tarde

O comando " for f in \#*; do mv $f $(sed 's/^#//' <<< "$f" ); done " funcionou, mais teve um porém, os diretórios/pastas que possui espaço
#viva bem, Esses diretórios não foram alterados pois o mv diz que não é um diretório.
Ex:
mv: target `(7)' is not a directory

Sei que possa vir a ser um pouco complexo, mais é possível alterar no local do espaço inserir uma " _ " ?

Abs


8. Re: Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/01/2015 - 19:41h

lucasschvantes escreveu:

Boa tarde

O comando " for f in \#*; do mv $f $(sed 's/^#//' <<< "$f" ); done " funcionou, mais teve um porém, os diretórios/pastas que possui espaço
#viva bem, Esses diretórios não foram alterados pois o mv diz que não é um diretório.
Ex:
mv: target `(7)' is not a directory

Sei que possa vir a ser um pouco complexo, mais é possível alterar no local do espaço inserir uma " _ " ?

Abs


Isto foi perigoso. O shell tentou executar uma linha de comando mais ou menos assim:

mv \#viva bem viva bem 


Supondo que os diretórios "bem" e "viva", existissem, o diretório "viva" seria movido para dentro do diretório "bem" com algumas mensagens de erro como por exemplo:

mv: cannot stat '#viva': No such file or directory
mv: cannot move 'bem' to a subdirectory of itself, 'bem/bem'


Se você tem muitos diretórios com espaços é quase certeza que coisas deste tipo ocorreram.

Continuo preferindo o 'rename' para renomear arquivos, é mais prático e mais seguro. Entretanto, como você já optou por este modo de resolver, aqui segue o patch:

for f in \#*; do mv "$f" "$(sed 's/^#//;s/ /_/g' <<< "$f")"; done 


Outros problemas ainda podem ocorrer dependendo de quão "zoados" estão seus nomes de diretórios :P.



9. Re: Script para Retirar #Hastag no início dos nomes. [Iniciante] [RESOLVIDO]

Lucas
lucasschvantes

(usa CentOS)

Enviado em 23/01/2015 - 19:52h

Opa

Funcionou corretamente, muito obrigado pelo ensinamento.


Abs






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts