Procure arquivos no diretório atual que não correspondam a um padrão

1

Como posso modificar o padrão na segunda instrução para excluir diretórios aninhados? (tal que ls retorna apenas foo.mp4 , não o conteúdo de bar: ).

$ ls *
foo.mp4 foo.ogg

bar:
bar.ogg
$ shopt -s extglob
$ ls !(*.ogg)
foo.mp4

bar:
bar.ogg

PS: Eu uso o OS X.

    
por Erwann 10.09.2016 / 01:54

2 respostas

0

O que eu estava pensando?

$ ls *.!(ogg)
foo.mp4
    
por 10.09.2016 / 06:27
3

Use find em vez de ls . Com find , você pode excluir uma ou mais expressões glob. Para o seu exemplo (e OSX), você poderia fazer

find * -depth 0 -type f ! -name '*.ogg'  -ls

que produz algo como ls -l (em apenas arquivos, considerando o -type f ):

66294163        0 -rw-r--r--    1 tom              wheel                   0 Sep  9 20:12 foo.mp4

Com o OSX, a primeira coluna é o valor de inode e, em seguida, a contagem de links. find não fornece tantas opções para listar como ls :

$ ls -l
total 0
drwx------  3 thomas  wheel  102 Sep  9 15:33 com.apple.launchd.OFStJ79qtq
drwx------  3 thomas  wheel  102 Sep  9 15:33 com.apple.launchd.VQsV1ae6bI
drwx------  3 thomas  wheel  102 Sep  9 15:33 com.apple.launchd.e6HBMt2vnS
drwx------  3 thomas  wheel  102 Sep  9 15:33 com.apple.launchd.he9U4OAIMI
-rw-r--r--  1 tom     wheel    0 Sep  9 20:12 foo.mp4
-rw-r--r--  1 tom     wheel    0 Sep  9 20:12 foo.ogg

mas pode ser útil.

    
por 10.09.2016 / 02:17