Comment puis-je créer uniquement des fichiers ls?

24

Je pense qu'il doit y avoir un moyen de faire en sorte que ls affiche uniquement les non-répertoires, mais la page de manuel ne le rend pas évident

pense binaire
la source
Pas sûr ls, mais vous pouvez facilement le faire avec la filecommande: file /directory/containing/the/files -maxdepth 1 -not -type d.
Henning Kockerbeck
1
Une autre façon serait de filtrer la sortie de lsthrough grep, quelque chose comme ls -1F /directory/containing/the/files | grep -vE /$. Mais sachez que l' analyse de la sortie de ls peut être délicate .
Henning Kockerbeck

Réponses:

37
ls -p | grep -v /

En utilisant ls -ptells lspour ajouter une barre oblique à des entrées qui sont un répertoire, et à l' aide grep -v /dit grepde retourner seulement les lignes ne contenant une barre oblique.

thomasrutter
la source
J'ai vérifié celle-ci parce que c'est ma réponse préférée (alors que je les ai toutes votées), mais j'essaie maintenant de trouver un moyen de la mettre en colonnes et d'inverser l'ordre de sortie ...
thinksinbinary
"Vous pouvez utiliser 1 commutateur pour la liste à colonne unique" désolé, j'ai essayé de comprendre ce que vous vouliez dire par là, j'apprécierais et donnerais un exemple / une explication si vous le souhaitez, je ne sais ce qu'est un commutateur en ce qui concerne la programmation C
thinksinbinary
@sdkks Vous n'avez pas besoin du 1commutateur lorsque vous canalisez la sortie car il sera par défaut sur une seule colonne dans cette situation. Si c'est ce que vous vouliez dire.
thomasrutter
@thinksinbinary ne sait pas comment le rendre multi-colonne, mais vous pouvez rechercher ou poser votre propre question distincte et quelqu'un saura.
thomasrutter
7

Vous pouvez essayer ceci:

find . -maxdepth 1 -not -type d

Et mappez cela à un alias spécial.

Mais si vous souhaitez vraiment utiliser la lscommande, voici:

ls -p | egrep -v /$

theabhinavdas
la source
6

Alternativement:

ls -lAh | grep -v '^d'

Cette méthode répertorie dans

  • -l Format de longue liste
  • -A Affiche presque tous (affiche les fichiers cachés mais ne les affiche pas .et ..)
  • -h Tailles de fichiers lisibles par l'homme

tandis que grep

  • -v Ne pas afficher les enregistrements correspondants
  • Regular expressionfiltre ^d- Ceux-ci commencent par la lettre d (pour le répertoire) iedrwxrwxr-x <some file details> <foldername>

Si vous ne voulez pas taper à chaque fois, vous pouvez en faire un alias pour votre profil bash / shell.

sdkks
la source
2

J'ai vu dans votre commentaire (@thinksinbinary) sur la réponse de @thomasrutter, que vous vouliez pouvoir les imprimer en ordre inverse et en colonnes. Vous l'avez probablement déjà compris ou avancé, mais le voici:

ls -pr | grep -v / | column
  • -p ajoute la barre oblique ('/') aux noms de répertoire
  • -r inverse l'ordre de sortie
  • -v permet à grep de faire une recherche inverse pour tout imprimer sauf les répertoires ( tout ce qui ne contient pas le '/' que -p y place )
  • "la colonne la met en colonnes" - Captain Obvious
Levi Uzodike
la source
1
Je pense que c'est cool que sur le forum Ubuntu les gens continuent de commenter et de lire vos messages après une longue période. Je voulais revenir sur Linux pour apprendre les systèmes d'assemblage et d'exploitation, car le faire sur Windows est beaucoup plus difficile. Merci!
thinksinbinary
0
ls -F | grep -v /

La commande ci-dessus affiche les fichiers, mais elle inclut des liens symboliques, des tuyaux, etc. Si vous souhaitez également les éliminer, vous pouvez utiliser l'un des indicateurs mentionnés ci-dessous.

ls -Fajoute des symboles aux noms de fichiers. Ces symboles affichent des informations utiles sur les fichiers.

ls -F | grep -Ev '/|@|*|=|>|\|'

La commande ci-dessus affiche uniquement les fichiers.

BarathVutukuri
la source