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' -maxdepth
opzione non è portatile; puoi -prune
invece utilizzare , per interrompere find
in modo portabile il ripetersi.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Sostituisci -print
con -exec ls -lG -- {} +
per eseguire ls
con 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 -A
a ls
o aggiungere il D
qualificatore glob in zsh ( ls uploads/^t_*(.D)
). Con find
, è possibile utilizzare un approccio diverso per farlo ricorrere a un solo livello ( find
non tratta i file di punti in particolare). Funziona completamente solo se eseguito find
nella directory corrente.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print