J'ai un répertoire appelé uploads
. Il contient un tas de fichiers, ainsi que quelques sous-répertoires qui contiennent à leur tour des fichiers.
Y a-t-il un moyen que je puisse (en une étape) faire ce qui suit:
Répertoriez SEULEMENT les fichiers du répertoire racine uploads - je ne souhaite pas voir les noms des sous-dossiers ni leur contenu;
et
Ne listez pas les fichiers qui commencent par
t_
Je connais le -d
drapeau, mais cela ne me donne pas tout à fait ce que je veux.
-exec ls -lG -- {} +
dans sa réponse pour obtenir la sortie en utilisant des options supplémentaires à ls. Vous pouvez également ajouter simplement une valeur-ls
à cette recherche pour obtenir une approximation rapide et approximative de la vue détaillée de ls.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.
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 correspondentt*
; dans bash, cette fonctionnalité doit être activée avecshopt -s extglob
, et en zsh, elle doit être activée avecsetopt ksh_glob
. Zsh a également la syntaxe équivalente^t_*
qui doit être activée avecsetopt 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 past_*
» et non «tous les fichiers qui ne correspondent past_*
».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êterfind
de manière portable de récursir.Remplacer
-print
par-exec ls -lG -- {} +
pour exécuterls
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 leD
qualificatif glob dans zsh (ls uploads/^t_*(.D)
). Avecfind
, 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écutezfind
dans le répertoire en cours.la source
-maxdepth
devrait fonctionner, mais le problème de "portabilité" mentionné par Gilles est que le BSDfind
(également disponible sous OSX) est un animal un peu différent, vous pourriez donc avoir besoin de sa réponse. @ Gilles: +1 pour le tour de zsh!prune
viennent à l'esprit, mais je vais laisser passer ça en disant simplement que lorsque je bricole sur mes propres systèmes le nombre de fois que la pensée " cette commande fonctionnerait-elle si j'étais sur AIX, Solaris ou MINIX3 "est à peu près ... en attente ... Je ne parviens pas à obtenir un relevé de compteur ... l'affichage est figé0.00
.ls
n'a pas une--use-telepathy
option? C'est le moyen le plus rapide d'afficher uniquement les fichiers de votre choix. Cela pourrait ne pas être portable cependant.la source
$9
dans cette déclaration?ls
sortie .print
$ NF` serait mieux, IMO. $ NF signifie nombre de champs, ce qui serait 9 et est une utilisation courante dans AWK comme une bonne opportunité d'enseigner aux autres sur $ NF.la source
find
?Laisse-moi essayer
ls
et utiliser des pipes:disons que la dernière colonne est la 9ème.
la source
Si le problème de la portabilité -maxdepth de find est un problème, vous pouvez utiliser:
Je ne suis pas un expert, mais je pense que cela devrait fonctionner. Je suppose que cela a l'air un peu cryptique, mais si vous parlez mal, ce n'est vraiment pas le cas. $ NF pourrait être utilisé au lieu de 9 $. Vous pouvez aussi faire:
qui fait la même chose (mais peut-être moins efficacement que l'ancien ???).
En fait, après avoir pensé aux autres posts, on dirait que
est un moyen encore plus court et plus clair.
Quelqu'un s'il vous plaît corrigez-moi si je me trompe. :-)
la source
ls
n'est généralement pas une bonne idée . Vos astuces awk échoueront avec les noms de fichiers contenant des espaces, par exemple.J'ai trouvé ces petites manières:
ou
la source
Essayez cet alias et utilisez-le:
la source
ls -hLlF
affiche les sous-répertoires et les fichiers commençant part_
. Alors, comment cela répond-il à la question?Peasy facile:
ls -l --hide 't_*' <absolute path to desired directory> | grep -v ^d
la source