GNU ls (ovvero il comando ls su sistemi Linux non embedded e Cygwin, disponibile anche su alcuni altri unices) ha un'opzione per nascondere alcuni file, in base al loro nome. Non c'è modo di ignorare le directory però.
ls --hide='t_*' uploads
Un altro approccio è fare in modo che la shell esegua la corrispondenza. Bash, ksh e zsh hanno un modello di negazione !(t_*)per abbinare tutti i file tranne quelli corrispondenti t*; in bash questa funzione deve essere attivata con shopt -s extglob, e in zsh deve essere attivata con setopt ksh_glob. Zsh ha anche la sintassi equivalente ^t_*che deve essere attivata setopt extended_glob. Questo non ignora ancora le directory. Zsh ha una funzione extra che permette di abbinare i file non solo per nome ma anche per metadati e altro: qualificatori glob . Aggiungi (.)alla fine di una partita per limitare ai file normali. La negazione ^fa parte della sintassi di corrispondenza del nome, quindi ^t_*(.)significa "tutti i file normali non corrispondenti t_*" e non "tutti i file che non corrispondono regolarmente t_*".
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Se ti trovi senza strumenti avanzati, puoi farlo su qualsiasi unix con find. Non è il tipo di cosa che digiti in genere sulla riga di comando, ma è potente e preciso. Caleb ha già mostrato come farlo con GNU find . L' -maxdepthopzione non è portatile; puoi -pruneinvece utilizzare , per interrompere findin modo portabile il ripetersi.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Sostituisci -printcon -exec ls -lG -- {} +per eseguire lscon le tue opzioni preferite sui file.
Tutti i comandi sopra nascondono i file punto (cioè i file il cui nome inizia con a .). Se si desidera visualizzarli, passare -Aa lso aggiungere il Dqualificatore glob in zsh ( ls uploads/^t_*(.D)). Con find, è possibile utilizzare un approccio diverso per farlo ricorrere a un solo livello ( findnon tratta i file di punti in particolare). Funziona completamente solo se eseguito findnella directory corrente.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print