Je veux créer une liste de tous les fichiers dans un répertoire, sans répertorier aucun des sous-répertoires qui résident dans ce même répertoire, et imprimer cette liste dans un nouveau fichier.
ls -d * > filelist
va créer une liste de tous les fichiers du répertoire courant, mais il répertorie également les sous-répertoires du répertoire courant. J'ai essayé la find
commande en utilisant l' -maxdepth 1
option - cependant, le format de sortie est un problème car find imprime également le chemin avec les noms de fichiers.
Si quelqu'un peut me dire s'il vous plaît peut-être une autre commande ou des options à utiliser qui produiront une liste de sortie uniquement des fichiers dans un répertoire et non les noms des sous-répertoires ou leur contenu, je l'apprécierais.
ls -d *
seulement lister les fichiers et dossiers dans le dossier actuel à l'exclusion des fichiers / dossiers cachés ici;Réponses:
Solution basée sur la recherche:
Solution basée sur Bash:
La solution bash vous fournira tout ce qui n'est pas un répertoire; cela inclura des choses comme les pipes nommées (vous le voulez probablement). Si vous souhaitez spécifiquement uniquement des fichiers , utilisez la
find
commande ou l'une d'entre elles:Si vous comptez l'utiliser régulièrement, vous pouvez bien sûr le mettre dans un alias quelque part dans votre
~/.bashrc
:Puisque vous avez noté dans les commentaires que vous êtes en fait sur OSX plutôt que sur Ubuntu, je suggérerais que la prochaine fois que vous dirigez des questions vers Apple ou des sites plus généraux Unix et Linux Stack Exchange.
la source
Liste des noms de fichiers uniquement:
Répertorier uniquement les répertoires:
grep -v -e ^ $ consiste à supprimer les lignes vierges du résultat.
Plus de détails :
ls -p flag est de mettre '/' à la fin du nom du répertoire, -R flag est pour la recherche récursive, -l pour lister avec info, -a pour lister tout (y compris les fichiers cachés) avec info, grep L'indicateur -v correspond à l'inversion des résultats et l'indicateur -e correspond à l'expression régulière.
la source
Pour répertorier les fichiers normaux uniquement:
Avec des liens symboliques inclus:
Lorsque le premier caractère de la liste décrit le type de fichier, cela
-
signifie donc qu'il s'agit d'un fichier normal, car le lien symbolique estl
.Debian / Ubuntu
Imprimez les noms de tous les fichiers correspondants (y compris les liens):
Avec des chemins absolus:
Imprimez les noms de tous les fichiers
/etc
qui commencentp
et finissent pard
:la source
Encore une autre solution, naïvement courte qui a fonctionné pour moi:
la source
ls -alR |grep -E '^-'
Je suggérerais d'utiliser find et de supprimer le nom du répertoire de la sortie si nécessaire:
la source
-maxdepth 1
devrait précéder tous les filtres, et vous pouvez obtenir ce résultat sans utilisersed
l'-printf
option, c'est-à-dire:find . -maxdepth 1 -type f -printf '%f\n'
(ce sera plus efficace que d'utiliser un programme supplémentaire).Une autre option possible est
Le
--file-type
met un / à la fin des dossiers (mais aussi un @ à la fin des liens symboliques.The grep -v '/'
Supprime les sous-répertoires (car ils se terminent maintenant par un '/'). Lesed s/@$//
supprime que @. Le -1 imprime un fichier par ligne afin que le grep -v fonctionne correctement.la source
-1
n'a pas d'importance pour grep vous n'en avez pas besoin; si vous voulez inclure des fichiers cachés, utilisez l'-a
option onls
ls -F | grep -v '/' | sed s/[@*]$// > filelist