Pastas com espaços [RESOLVIDO]

1. Pastas com espaços [RESOLVIDO]

wander nilson carrusca
carrusca

(usa Debian)

Enviado em 02/03/2011 - 22:27h

Estou executando um ls em um diretório, porém toda pasta que tem espaços em seu nome ele interpreta como duas pastas e não uma, veja o exemplo:
nome da pasta: curso de segurança
vai para o arquivo txt como curso de segurança, mas quando faço a leitura do arquivo txt lê como curso uma arquivo de outro arquivos e segurança outro arquivo, este é um script para compactar estas pastas.
como posso resolver este probleminha.


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/03/2011 - 19:24h

Uma boa maneira de contornar isso é editar o valor da variável de ambiente IFS.

Bem de antemão:
Você deve mudar o valor da referida variável (separador de campos) que por default é:

(espaço, tabulação, nova linha)

para apenas (tabulação, nova linha) caso não queira que seu laço de repetição use como "divisor de entrada para incrementação" o caractere de espaço em branco. Como fazer isso de forma simples? Veja este pequeno exemplo.


#!/bin/bash
# more http://sekysu.blogspot.com

#eg. file name blank espaces
touch 'nm arq c espaco .txt'
IFS=$(echo -e "\t\n")
for i in $(ls); do
echo $i
done
reset

Existem outras formas de contornar este "problema", mas esta é a mais prática, penso eu em minha humilde opnião.

3. Uso da tecla tab

Bruno Marques
brunomarsantos

(usa openSUSE)

Enviado em 02/03/2011 - 22:39h

Olá, não entendi sua pergunta direito.
Mas se você precisa entrar nas pastas, digite a primeira palavra do nome dela e aperte a tecla tab, assim o terminal completa para você o nome da pasta.
Exemplo:
entrar na pasta CURSO DE SEGURANÇA.
Escreva CURSO e tecle tab.
Ficará assim: CURSO\ DE\ SEGURANÇA/

Como não entendi direito a pergunta posso ter respondido algo que você já sabia.


4. Re: Pastas com espaços [RESOLVIDO]

Paulo Manoel
pael

(usa openSUSE)

Enviado em 02/03/2011 - 22:41h

ou coloque entre aspas "curso de segurança"


5. Re: Pastas com espaços [RESOLVIDO]

Raphael Monteiro
rmonteiraum

(usa CentOS)

Enviado em 02/03/2011 - 23:50h

acho q a resposta do brunomarsantos resolve...


6. Pastas com espaços

wander nilson carrusca
carrusca

(usa Debian)

Enviado em 03/03/2011 - 07:16h

Acredito que não expliquei direito, estou escrevendo um script de backup, que age da seguinte maneira:
Posiciono na pasta onde quero copiar, listo o conteúdo e guardo em arquivo texto, depois faço a leitura deste aquivo texto linha por linha vou para dentro do diretório lido e executo a compactação das pastas / arquivos desta pasta. Acontece que quando listo o diretorio / pasta e armazeno no arquivo, toda pasta que tem espaços em seu nome é lido em separado, exemplo:
Segurança em redes é lido Segurança depois em depois redes e lê também Segurança em redes, acaba criando arquivos que não existem.
É isto aí, tenho que desconsiderar os espaços na hora de ler do arquivo texto.

obrigado

wander



7. Re: Pastas com espaços [RESOLVIDO]

Daniel Fernandes
volcom

(usa Debian)

Enviado em 03/03/2011 - 10:36h

Como esta seu script? Pode nos passar?

Penso que não é necessário fazer esse arquivo com os nomes das pastas, e sim dar o ls direto no comando de backup.

Como disse no começo, nos passe seu script para ajudarmos melhor.

Abraço


8. Re: Pastas com espaços [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 03/03/2011 - 13:38h

cara, talvez sua saida mais simples é colocar aspas quando for ler a variável, exemplo:


ls | while read arquivos; do cat "$arquivos"; done




9. Re: Pastas com espaços [RESOLVIDO]

wander nilson carrusca
carrusca

(usa Debian)

Enviado em 03/03/2011 - 17:28h

Pessoal, segue o script que estou usando, não estranhem sou iniciante.
obrigado pela ajuda


#!/bin/bash
#
# Lista o diretorio e armazena em arquivo testo (arqpastas.txt)
# Lê o arquivo texto (linha a linha) e se posiciona na pasta lida, lista esta pasta e armazena em arquivo texto (arqdados.txt)
# le a primeira linha do arquivo arqdados.txt e compacta, salvando em /home/backup/data+arquivo lido
#
#
# atribui a variavel hoje a data do dia

hoje=$(date +%d%m%y)

#
#
cd ..
cd ..
cd /home/
sudo ls > arqpastas.txt
while read linha
do

if [ "$linha" != "arqpastas.txt" ] && [ "$linha" != "administrador" ] && [ "$linha" != "BK-Projeto_SGQ" ] && [ "$linha" != "lost+found" ]
then
cd /home/$linha
ls > arqdados.txt
mkdir /home/backup/$hoje$linha
while read dados
do
cd /home/$linha

if [ "$dados" != "arqdados.txt" ]
then
tar -czvf /home/backup/$hoje$linha/$dados.tar.gz $dados
else
echo "mesma pasta de dados"
fi
done < arqdados.txt

else
echo "arquivo de base de dados"
fi

done < arqpastas.txt


10. Re: Pastas com espaços [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/03/2011 - 19:58h

E outra coisa: você deve fazer um "for" e não um "while"

IFS=$(echo -e "\t\n")
for i in $(cat arquivo); do
# comandos
done
reset


11. Re: Pastas com espaços [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/03/2011 - 21:08h

coloque entre aspas duplas

eu gosto de substituir os espaços por _

ex:
scripts_bsd
scripts_linux

ainda mais se for usar em backup

não se vai ser util, mas da uma olhada a forma de organização das pastas que eu usei

========================================
#!/bin/sh

BACKUP() {
RSYNC="/usr/bin/rsync -Cravzp"
TAR="/usr/bin/tar -cjvf"
SSH="/usr/bin/ssh"
KEY="/home/backup/.ssh"
RUSER="backup"
RHOST="$1"
RPATH="$2"
NAME="$3"
LPATH="/backup/$RHOST/${NAME}_$(date +%Y-%m-%d_%H:%M)"
PKGBKP="$LPATH.tar.bz2"
LOG="/var/log/backup.log"

echo "###############== START - $RPATH - $(date +%d-%m-%Y_%H:%M) ==###############" >> $LOG
mkdir -p "$LPATH" >> $LOG
$RSYNC $RUSER@$RHOST:$RPATH $LPATH >> $LOG
$TAR $PKGBKP $LPATH >> $LOG
rm -rf $LPATH
echo "###############== FINISH - $RPATH - $(date +%d-%m-%Y_%H:%M) ==###############" >> $LOG
echo "" >> $LOG
}

### BACKUP IP DIR NAME
### BACKUP "192.168.2.10" "/mnt/dados/" "dados"

BACKUP "192.168.2.1" "/mnt/publico/" "publico"
===================================================


12. Re: Pastas com espaços [RESOLVIDO]

Emanuel Holanda Barroso
manueng

(usa Lubuntu)

Enviado em 10/02/2017 - 15:05h

brunomarsantos escreveu:

Olá, não entendi sua pergunta direito.
Mas se você precisa entrar nas pastas, digite a primeira palavra do nome dela e aperte a tecla tab, assim o terminal completa para você o nome da pasta.
Exemplo:
entrar na pasta CURSO DE SEGURANÇA.
Escreva CURSO e tecle tab.
Ficará assim: CURSO\ DE\ SEGURANÇA/

Como não entendi direito a pergunta posso ter respondido algo que você já sabia.


nao sua colocação foi pérfeita enquanto os outros apontavam formas mais complexas voce mostrou a mais simples
se nao resolver ai o cara se aprofunda.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts