Comment exclure des répertoires lors de la liste des fichiers dans le répertoire actuel?
ls .
^ inclura des répertoires dans la liste.
Comment exclure des répertoires lors de la liste des fichiers dans le répertoire actuel?
ls .
^ inclura des répertoires dans la liste.
Réponses:
Essaye celui-là:
find . -maxdepth 1 -not -type d
ls .
sans répertoires - et le voici.
-ls
ou -exec ls -l {} \;
le rendrait comme ls -l
sans répertoires.
Pour obtenir exactement l'équivalent de ls .
vous, vous ne devez pas afficher les répertoires cachés.
find . -maxdepth 1 -not -type d -and -not -name '.*'
et cela vous laisse toujours avec './' préfixé à chaque nom de fichier. Ce n'est pas vraiment un problème, mais je pense que c'est plutôt moche. J'y suis allé avec:
ls -p | grep -v '/$'
Et cela vous donnera une liste qui se ressemble, et vous pouvez également ajouter des ls
arguments supplémentaires . Ajoutez un --color=always
et vous récupérerez vos dircolors, ou -a
pour voir les fichiers cachés.
J'aime la réponse d'Alexander car il dépend en fait d'un système de fichiers caractéristique du fichier en question, de sorte qu'il ne sera jamais dupe. Ma réponse sera dupée par un fichier qui a un «/» comme dernier caractère de son nom. Mais cela semble demander des ennuis.
Bien que ce soit un vieux post, mais j'ai pensé que cela pourrait aider ..
$ ls -l | grep -v ^ d
Il répertorie tous les fichiers, y compris les liens symboliques, les fichiers de caractères et les blocs.
Les solutions "trouver" ci-dessus perdent certaines des capacités de ls - par exemple: lister uniquement les fichiers, triés dans le temps de modification décroissant.
Les réponses "ls -p | grep" ne traitent pas avec élégance d'autres éléments de ls tels que -R s'ils sont souhaités
La réponse ci - dessous, alors que plus bavard, à mon avis , reflète le plus vrai ls comportement et plus de flexibilité pour sélectionner « uniquement les fichiers »
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Remplacez simplement les commutateurs ls comme vous le souhaitez et le résultat sera retourné avec des fichiers uniquement. Si des liens et d'autres éléments sont également requis, une révision mineure devra être effectuée pour le test d'inclusion.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Avec cela, vous pouvez toujours utiliser d'autres options ls
. Ou ... supprimer -v
pour ne répertorier que les répertoires. Ou ... remplacez le répertoire par tout autre type de fichier qui file
comprend et signale, comme ASCII, vide, ELF, etc.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
est environ 3 fois plus rapide dans mes tests
J'étais sur un système où le find
binaire ne supportait pas -not
et j'ai fini par utiliser:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Avantages: ne repose sur rien d'autre que sh ls echo
compatible avec bash et dash
peut être modifié pour correspondre à d'autres choses (comme les répertoires) en changeant -f
est plus rapide que certaines des réponses et utilise moins de RAM et de CPU