Você não precisa do comando ls
, pois o shell fará a expansão para você e você deve citar "
da variável
for i in .*/
do
echo "$i"
done
Estou tentando listar todos os diretórios ocultos com um loop "for":
for i in ''ls -a | grep '^\.'' ';
do
echo $i
done
O problema é que o loop divide alguns nomes de diretórios em dois.
Por exemplo: ls -a | grep '^\.'
me dá
.
..
.Deleted Items
.Drafts
.Junk
.Junk E-mail
.Sent
.Sent Items
.Trash
Mas meu loop me dá:
.
..
.Deleted
Items
.Drafts
.Junk
.Junk
E-mail
.Sent
.Sent
Items
.Trash
Como eu melhoro meu script para que ele não divida nomes de diretório?
A menos que exista uma necessidade específica de 'for', você pode tentar um loop while:
ls -d .* | while read Name
do
echo "$Name"
done
Muitas maneiras de contornar isso, desde encontrar até citações extras, etc.
Pessoalmente, acho útil modificar a variável IFS. O IFS é usado para determinar qual o caractere de quebra entre itens de lista para for
e similares. Portanto, defina o IFS como uma nova linha por meio de IFS=$'\n'
. Isso fará com que o loop for
seja lido até o final de uma linha de entrada, antes de iniciar um novo item em sua lista. Pode não ser a maneira mais fácil de resolver esse problema específico (a resposta de Iain é mais elegante), mas achei bastante útil em várias situações.
Eu tive um problema semelhante há alguns dias e este tópico foi muito útil. Espero que você encontre inspiração lá.