O GNU ls (ou seja, o comando ls em sistemas Linux não embarcados e o Cygwin, também disponível em outros unices) tem a opção de ocultar alguns arquivos, com base em seus nomes. Não há como ignorar diretórios.
ls --hide='t_*' uploads
Outra abordagem é fazer com que o seu shell faça a correspondência. Bash, ksh e zsh têm um padrão de negação !(t_*)
para corresponder a todos os arquivos, exceto os correspondentes a t*
; no bash, esse recurso precisa ser ativado com shopt -s extglob
e, em zsh, ele precisa ser ativado com setopt ksh_glob
. O Zsh também possui a sintaxe equivalente ^t_*
, que precisa ser ativada com setopt extended_glob
. Isso ainda não ignora diretórios. O Zsh tem um recurso extra que permite corresponder arquivos não apenas pelo nome, mas também por metadados e mais: glob qualificadores . Adicione (.)
no final de uma partida para restringir a arquivos regulares. A negação ^
faz parte da sintaxe de correspondência de nomes, portanto, ^t_*(.)
significa “todos os arquivos regulares não correspondem a t_*
” e não “todos os arquivos que não são arquivos regulares correspondentes a t_*
”.
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Se você se encontrar sem ferramentas avançadas, você pode fazer isso em qualquer unix com find
. Não é o tipo de coisa que você normalmente digitaria na linha de comando, mas é poderoso e preciso. Caleb tem já mostramos como fazer isso com o GNU find . A opção -maxdepth
não é portátil; você pode usar -prune
, para portably parar find
de recursing.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Substitua -print
por -exec ls -lG -- {} +
para executar ls
com suas opções favoritas nos arquivos.
Todos os comandos acima ocultam arquivos dot (ou seja, arquivos cujo nome começa com .
). Se você quiser exibi-los, passe -A
para ls
ou adicione o qualificador D
glob em zsh ( ls uploads/^t_*(.D)
). Com find
, você pode usar uma abordagem diferente para reciclar apenas um nível ( find
não trata especialmente os arquivos de pontos). Isso só funciona totalmente se você executar find
no diretório atual.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print