O que eu estava pensando?
$ ls *.!(ogg)
foo.mp4
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.
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.
Tags command-line bash ls wildcards