linux + como ignorar (filtro) arquivo com espaço

4

Às vezes, um nome de arquivo é criado a partir de alguns nomes e espaços entre cada nome da seguinte forma:

   $ touch  "A B C"
   $ ls
   A B C      <-- one file but has three words !                        
   file1
   file2
   file3

Como posso ignorar (filtrar) o arquivo que realmente criou a partir de alguns nomes como "A B C"?

Saída esperada

     $ ls <filter>
     file1
     file2
     file3
    
por yael 28.04.2013 / 16:08

4 respostas

5

Se você fizer o seguinte:

ls | grep -F -v ' '

Você não verá nenhum arquivo com espaços nos nomes

(Eu costumava ter fgrep em vez de grep -F no exemplo, mas como Hauke Laging apontou que é depreciado )

    
por 28.04.2013 / 16:12
3

Com o GNU ls, ou seja, sob Linux não embarcado:

ls -I '* *'

Não há muito motivo para pular arquivos cujo nome contenha um espaço. Se você está fazendo isso porque tem algo como file_names=$(ls) ou for f in $(ls) em um script, não analise a saída de ls , e seu problema provavelmente irá embora.

    
por 30.04.2013 / 02:53
2

Usando os globs estendidos do KSH, você pode filtrar nomes de arquivos em uma expansão glob:

ls -d -- !(A B C)
    
por 28.04.2013 / 19:47
1

Talvez isso também seja útil:

ls -l --quoting-style=literal:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 A B C

ls -l --quoting-style=locale:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 „A B C“

ls -l --quoting-style=shell:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 'A B C'

ls -l --quoting-style=shell-always:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 'A B C'

ls -l --quoting-style=c:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 "A B C"

ls -l --quoting-style=escape:
-rw-r--r-- 1 hl hauke 0 28. Apr 16:55 A\ B\ C
    
por 28.04.2013 / 17:00