GNU ls (c’est-à-dire la commande ls sur les systèmes Linux non intégrés et Cygwin, également disponible sur d’autres unités de travail) dispose d’une option permettant de masquer certains fichiers, en fonction de leur nom. Il n'y a aucun moyen d'ignorer les répertoires.
ls --hide='t_*' uploads
Une autre approche consiste à faire correspondre votre shell. Bash, ksh et zsh ont un motif de négation !(t_*)
correspondant à tous les fichiers sauf ceux qui correspondent t*
; dans bash, cette fonctionnalité doit être activée avec shopt -s extglob
, et en zsh, elle doit être activée avec setopt ksh_glob
. Zsh a également la syntaxe équivalente ^t_*
qui doit être activée avec setopt extended_glob
. Cela n'ignore toujours pas les répertoires. Zsh possède une fonctionnalité supplémentaire qui permet de faire correspondre les fichiers non seulement par leur nom, mais également par les métadonnées et plus encore: les qualificatifs glob . Ajoutez (.)
à la fin d'une correspondance pour limiter les fichiers normaux. La négation ^
fait partie de la syntaxe de correspondance de nom, ainsi ^t_*(.)
signifie «tous les fichiers normaux ne correspondent pas t_*
» et non «tous les fichiers qui ne correspondent pas t_*
».
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Si vous vous trouvez sans outils avancés, vous pouvez le faire sur n'importe quel unix avec find
. Ce n'est pas le genre de chose que vous tapez habituellement sur la ligne de commande, mais c'est puissant et précis. Caleb a déjà montré comment faire cela avec GNU Find . L' -maxdepth
option n'est pas portable. vous pouvez utiliser à la -prune
place, pour arrêter find
de manière portable de récursir.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Remplacer -print
par -exec ls -lG -- {} +
pour exécuter ls
avec vos options préférées sur les fichiers.
Toutes les commandes ci-dessus masquent les fichiers à points (c'est-à-dire les fichiers dont le nom commence par a .
). Si vous souhaitez les afficher, passez -A
à ls
ou ajoutez le D
qualificatif glob dans zsh ( ls uploads/^t_*(.D)
). Avec find
, vous pouvez utiliser une approche différente pour le faire récidiver à un niveau seulement ( find
ne traite pas spécialement les fichiers à points). Cela ne fonctionne pleinement que si vous exécutez find
dans le répertoire en cours.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print