O GNU ls (ou seja, o comando ls em sistemas Linux não incorporados e o Cygwin, também disponível em outros órgãos) tem uma opção para ocultar alguns arquivos, com base em seus nomes. Porém, não há como ignorar diretórios.
ls --hide='t_*' uploads
Outra abordagem é fazer com que 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 aqueles correspondentes t*
; No bash, esse recurso precisa ser ativado shopt -s extglob
e, no zsh, precisa ser ativado setopt ksh_glob
. O Zsh também possui a sintaxe equivalente ^t_*
que precisa ser ativada setopt extended_glob
. Isso ainda não ignora os diretórios. O Zsh possui um recurso extra que permite corresponder arquivos não apenas pelo nome, mas também por metadados e mais: qualificadores glob . Adicione (.)
no final de uma correspondência para restringir a arquivos regulares. A negação ^
faz parte da sintaxe de correspondência de nome, portanto, ^t_*(.)
significa "todos os arquivos regulares que não correspondem t_*
" e "não todos os arquivos que não correspondem aos arquivos regulares t_*
".
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Se você se encontrar sem ferramentas avançadas, poderá fazer isso em qualquer unix com find
. Não é o tipo de coisa que você normalmente digita na linha de comando, mas é poderoso e preciso. Caleb já mostrou como fazer isso com o GNU find . A -maxdepth
opção não é portátil; você pode usar -prune
, em vez disso, para parar find
de recorrer com portabilidade.
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 de ponto (ou seja, arquivos cujo nome começa com a .
). Se você deseja exibi-los, passe -A
para ls
ou adicione o D
qualificador glob em zsh ( ls uploads/^t_*(.D)
). Com find
, você pode usar uma abordagem diferente para fazer com que ela recorra apenas um nível ( find
não trata especialmente os arquivos de ponto). 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