Bash: iterar com variável nas linhas da saída 'ls -1'

1

Em um ciclo simples como o seguinte

for f in $(ls -1) ;
        do
        something
done

Eu gostaria de armazenar cada linha da saída de ls -1 na variável f .

Existe uma maneira de fazer isso sem definir IFS=$'\n' ?

    
por BowPark 27.04.2014 / 15:12

2 respostas

10

Como dissemos nos comentários, não analisa ls é propenso a erros e completamente desnecessário. Tudo que você precisa é

for f in *;
do
        something
done

Isso irá percorrer os arquivos e diretórios 1 em seu diretório atual e salvará cada um deles (espaços e todos) como $f . Por exemplo:

$ ls -A1
file1
file 2
$ for f in *; do echo "File is '$f'"; done
File is 'file1'
File is 'file 2'

1 No bash, isso irá ignorar nomes de arquivos / diretórios começando com . (arquivos ocultos) a menos que você tenha definido dotglob com shopt -s dotglob .

    
por 27.04.2014 / 15:57
-1

Use loop while:

$ touch "one file"
$ touch "second  file   edsfs"
$ ls
one file  second  file   edsfs
$ ls -1
one file
second  file   edsfs
$ for f in $(ls -1); do echo "\"$f\""; done
"one"
"file"
"second"
"file"
"edsfs"
$ while read f; do echo "\"$f\""; done < <(ls -1)
"one file"
"second  file   edsfs"
    
por 27.04.2014 / 16:12