Je peux utiliser ls -ld */
pour lister toutes les entrées du répertoire dans le répertoire actuel. Existe-t-il un moyen aussi simple de répertorier tous les fichiers normaux du répertoire en cours? Je sais que je peux utiliser trouver
find . -maxdepth 1 -type f
ou stat
stat -c "%F %n" * | grep "regular file" | cut -d' ' -f 3-
mais ceux-ci ne me paraissent pas trop élégants. Existe-t-il un moyen simple et sympa de ne répertorier que les fichiers normaux (les périphériques, les pipes, etc., ça ne me dérange pas) mais pas les sous-répertoires du répertoire courant? La liste des liens symboliques serait également un avantage, mais ce n’est pas une nécessité.
find
commande est la meilleure façon de faire ce que vous voulez. Pour certaines autres options fiables, vous devriez vous pencher sur les commandes spécifiques au shell (et celles-ci sont tout sauf portables)!ls -d */
, qui est court, facile à taper et facile à comprendre. Je suis donc assez content de la réponse d'Ulrich Dangel, même si je n'utilise pas zsh.Réponses:
Avec
zsh
et Glob Qualifiers, vous pouvez facilement l'exprimer directement, par exemple:renverra uniquement la liste des fichiers normaux ou une erreur en fonction de votre configuration.
Pour les non-annuaires:
(comprendra des liens symboliques (y compris vers des répertoires), des tubes nommés, des périphériques, des sockets, des portes ...)
pour des fichiers normaux et des liens symboliques vers des fichiers normaux.
pour les non-répertoires et pas de liens symboliques vers les répertoires non plus.
En outre, voir le
D
qualificatif de globbing si vous souhaitez inclure D fichiers ot (fichiers cachés), comme*(D-.)
.la source
Cette commande répertorie tous les fichiers non cachés qui ne sont pas des répertoires (fichiers normaux, liens, fichiers de périphérique , etc.). Pour inclure également les fichiers cachés, ajoutez l’
-A
option àls
Cela suppose qu'aucun fichier ne contient de caractères de nouvelle ligne. Ajouter une
-q
option pourls
transformer tous les caractères non imprimables, y compris newline?
, en garantissant qu’ils soient sur une seule ligne et donc appropriés pour être alimentés par un utilitaire basé sur une ligne commegrep
pour l’impression sur un terminal.la source
--color=always
àls
OSX-G
.sudo chmod 777
à la fin, et on m'a donné des erreurs ... Toute aide est grandement appréciéels -pL | grep -v /
. Les-L
liens symboliques de déréférences ajoutés .ls -pdL something* | grep -v /
. L'-d
option ajoutée répertorie les répertoires eux-mêmes, pas leur contenu, afin qu'ils soient correctement exclus.Pour lister uniquement les fichiers normaux:
Avec des liens symboliques (vers tout type de fichier) inclus:
Où le premier caractère de la liste décrit le type de fichier, ce
-
qui signifie qu'il s'agit d'un fichier normal, car le lien symbolique l'estl
.Debian / Ubuntu
Imprimer les noms de tous les fichiers correspondants (y compris les liens):
Avec des chemins absolus:
Imprimez les noms de tous les fichiers de
/etc
ce débutp
et finissez pard
:la source
ls
n’a pas le choix, mais l’un des avantages de unix et linux est que les pipelines longs et inélégants peuvent facilement être transformés en script shell, en fonction ou en alias. et ceux-ci peuvent, à leur tour, être utilisés dans les pipelines comme tout autre programme.(REMARQUE: il existe des problèmes de portée avec les fonctions et les alias. Les scripts sont disponibles pour tout exécutable capable de les lire et de les exécuter. Les alias et les fonctions ne sont disponibles que dans le shell actuel - bien que les fichiers .profile / .bashrc etc. puissent être redéfinis. En outre, un script peut être écrit dans n’importe quelle langue - y compris bash / sh, awk, perl, python, et d’autres - quelle que soit celle qui convient le mieux à votre travail ou que vous connaissez le mieux)
par exemple
alias lsf='find . -maxdepth 1 -type f -print0 | xargs -0r ls'
J'ai ajouté xargs pour pouvoir utiliser toutes les
ls
options habituelles , par exemplelsf -lrS
Parce qu'il utilise
find
, tous les fichiers de points normalement masqués seront affichés et tous les noms de fichiers porteront le préfixe ./, c'est à peu près la seule différence que vous remarquerez.Vous pouvez exclure les fichiers de points avec,
! -iname '.*'
mais vous devez alors avoir deux versions de l’alias - une qui affiche les fichiers de points et une autre qui ne l’a pas.alias lsf2='find . -maxdepth 1 -type f -a ! -iname '\''.*'\'' -print0 | xargs -0r ls'
Alternativement, si
lsf
était un script plutôt qu'un alias, vous pouvez analyser les options (peut-être avec getopts ou / usr / bin / getopt ou similaire), et exclure les fichiers de points sauf s'ils-a
étaient présents.la source
-name
est suffisant, vous n’avez pas besoin-iname
.L'option -F de ls ajoute * aux exécutables, / aux répertoires, @ aux liens symboliques, = aux sockets et | aux FIFO. Vous pouvez ensuite utiliser grep pour exclure les caractères de fichier non standard de la sortie et vous disposez des fichiers. Cela fonctionnera dans n’importe quel shell, pas seulement zsh.
Les faiblesses sont:
@
,=
ou|
seront exclus (mais vous ne devriez pas avoir vraiment des fichiers avec ces personnages au nom de toute façon)la source
=
,@
ou|
caractères.=
est courant dans maildir ou dans les noms de fichiers comportant une partie encodée en base64 ou avec une citation imprimable@
dans les définitions de paramètres régionaux, pour les adresses électroniques, etc. Il est rare qu’ils apparaissent à la fin du nom de fichier. (seulement 31 sur 2,2 millions sur ce système par exemple)Le manuel indiquait que l'option 'f' ne visait que le fichier normal, pas les pipes, les sockets ou les périphériques block / char, ce qui signifie que vous faites déjà le bon travail.
la source
Ce n'est pas particulièrement court, mais vous pouvez le transformer en script ou en alias si vous devez l'appeler rapidement. À l'aide de la commande ls en tant que tableau d'entrée, appelez ls -ld sur chaque entrée acheminée vers grep pour exclure les répertoires dont le résultat est envoyé à null. Si l'opération réussit, indiquez à nouveau l'entrée d'origine:
Vous pouvez inverser la sortie grep et la sortie conditionnelle, les mêmes résultats:
la source
\dev\null
?!?!C'est un fil un peu ancien, mais le moyen le plus propre de ne lister que les fichiers.
la source
touch "some file name"
pour voir un contrels -al | grep '^-' | awk '{ for(i=9; i<=NF; ++i) printf $i""FS; print "" }'
, devrait gérer les fichiers avec des espaces.