web-dev-qa-db-fra.com

Comment lister uniquement les fichiers et non les répertoires d'un répertoire Bash?

Comment puis-je lister tous les fichiers d'un dossier mais pas leurs dossiers ou sous-fichiers. En d'autres termes: Comment puis-je lister uniquement les fichiers?

64
Rodrigo

Utiliser find:

find . -maxdepth 1 -type f

L'utilisation de l'option -maxdepth 1 Garantit que vous ne regardez que dans le répertoire actuel (ou, si vous remplacez le . Par un chemin, ce répertoire). Si vous voulez une liste récursive complète de tous les fichiers de ce répertoire et de ses sous-répertoires, supprimez cette option.

87
carlpett
ls -p | grep -v /

ls -p vous permet d'afficher/après le nom du dossier, qui agit comme une balise à supprimer.

6
Dr_Hope
  • La réponse de carlpett find (find . -maxdepth 1 -type f) fonctionne en principe, mais est pas tout à fait comme si vous utilisiez ls: vous obtenez potentiellement non trié la liste des noms de fichiers all précédé de ./, et vous perdez la possibilité d'appliquer ls nombreux options;
    également find invariablement trouve caché éléments aussi , alors que le comportement de ls dépend de la présence ou de l'absence des options -a ou -A.

    • Une amélioration , suggérée par Alex Hall dans un commentaire sur la question consiste à combiner Shell globbing avec find:

          find * -maxdepth 0 -type f  # find -L * ... includes symlinks to files
      
      • Cependant, alors que cela résout le problème du préfixe et vous donne une sortie triée par ordre alphabétique , vous n'avez toujours aucun contrôle (en ligne) sur l'inclusion d'éléments masqués ni l'accès à ls de nombreuses autres options de tri/format de sortie.
  • La réponse de ls + grep de Hans Roggeman est pragmatique, mais vous oblige à utiliser le format de sortie long (-l) .


Pour remédier à ces limitations, j’ai écrit le fls ( f iltering utilitaire ls ,

  • un utilitaire qui offre la souplesse de sortie de ls, tout en offrant également la capacité de filtrage de type,
  • simplement en plaçant des caractères de filtrage de types tels que f pour les fichiers, d pour les répertoires et l pour les liens symboliques avant une liste d’arguments ls (exécutez fls --help ou fls --man pour apprendre plus).

Exemples:

fls f        # list all files in current dir.
fls d -tA ~  #  list dirs. in home dir., including hidden ones, most recent first
fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)

Installation

Plateformes prises en charge

  • Lors de l'installation à partir du registre npm : Linux et macOS
  • Lors de l’installation manuelle : n’importe quelle plate-forme de type Unix avec Bash

Depuis le npm registry

Remarque: Même si vous n'utilisez pas Node.js, son gestionnaire de paquets, npm, fonctionne sur toutes les plates-formes et est facile à installer. essayer
curl -L https://git.io/n-install | bash

Avec Node.js installé, installez-le comme suit:

[Sudo] npm install fls -g

Remarque :

  • Que vous ayez besoin ou non de Sudo dépend de la façon dont vous avez installé Node.js/io.js et du fait que vous avez modifié les autorisations ultérieurement ; Si vous obtenez une erreur EACCES, essayez à nouveau avec Sudo.

  • Le -g Garantit global installation et est nécessaire pour insérer fls dans le système $PATH De votre système.

Installation manuelle

  • Téléchargez ce script bash sous la forme fls.
  • Rendez-le exécutable avec chmod +x fls.
  • Déplacez-le ou faites un lien symbolique vers un dossier de votre $PATH, Tel que /usr/local/bin (MacOS) ou /usr/bin (Linux).
4
mklement0

Vous pouvez également utiliser ls avec grep ou egrep et le placer dans votre profil comme alias:

ls -l | egrep -v '^d'
ls -l | grep -v '^d'
1
Hans Roggeman