Commande ls: comment puis-je obtenir une liste de chemin complet récursive, une ligne par fichier?

Comment puis-je obtenir une liste plate de chemins récursifs à une ligne?

Par exemple, je veux juste une liste plate des fichiers avec leurs chemins complets:

/home/dreftymac/. /home/dreftymac/foo.txt /home/dreftymac/bar.txt /home/dreftymac/stackoverflow /home/dreftymac/stackoverflow/alpha.txt /home/dreftymac/stackoverflow/bravo.txt /home/dreftymac/stackoverflow/charlie.txt 

ls -a1 presque ce dont j’ai besoin, mais je ne veux pas de fragments de chemin, je veux des chemins complets.

Si vous voulez vraiment utiliser ls , formatez ensuite sa sortie en utilisant awk:

 ls -R /path | awk ' /:$/&&f{s=$0;f=0} /:$/&&!f{sub(/:$/,"");s=$0;f=1;next} NF&&f{ print s"/"$0 }' 

Utilisez find:

 find . find /home/dreftymac 

Si vous ne voulez que des fichiers (omettre les répertoires, les périphériques, etc.):

 find . -type f find /home/dreftymac -type f 

ls -ld $(find .)

si vous voulez sortinger votre sortie par heure de modification:

ls -ltd $(find .)

Essayez la méthode plus simple suivante:

 find "$PWD" 

La meilleure commande est: tree -fi

Pour utiliser les fichiers mais pas les liens, vous devez supprimer > de votre sortie:

 tree -fi |grep -v \> 

Si vous voulez connaître la nature de chaque fichier, (pour ne lire que les fichiers ASCII par exemple) avec deux while s:

 tree -fi | \ grep -v \> | \ while read first ; do file ${first} done | \ while read second; do echo ${second} | grep ASCII done 

Oh vraiment une longue liste de réponses. Cela a beaucoup aidé et finalement j’ai créé par moi-même ce que je cherchais:

Pour répertorier tous les fichiers d’un répertoire et ses sous-répertoires:

 find "$PWD" -type f 

Pour répertorier tous les répertoires d’un répertoire et ses sous-répertoires:

 find "$PWD" -type d 

Pour répertorier tous les répertoires et fichiers d’un répertoire et ses sous-répertoires:

 find "$PWD" 

Je ne connais pas le chemin complet, mais vous pouvez utiliser -R pour la récursivité. Alternativement, si vous n’êtes pas penché sur ls , vous pouvez simplement find * .

N’utiliser aucune commande externe autre que ls:

ls -R1 /path | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
ls -R1 /path | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done 

trouver / fera le tour

 du -a 

Pratique pour certains boîtiers d’appareils limités où trouver / localiser n’est pas disponible.

Je pense que pour une liste plate, le meilleur moyen est de:

 find -D tree /fullpath/to-dir/ 

(ou pour le sauvegarder dans un fichier txt)

 find -D tree /fullpath/to-dir/ > file.txt 

Le moyen le plus simple pour tous vos futurs collaborateurs est simplement:

 du 

Cela montre cependant également la taille de chaque dossier. Vous pouvez utiliser awk pour afficher uniquement le nom du dossier:

 du | awk '{print $2}' 

Edit- Désolé désolé, mon mauvais. Je pensais que seuls les dossiers étaient nécessaires. Je vais laisser ça ici au cas où quelqu’un dans le futur en aurait besoin de toute façon …

Avec la liberté d’utiliser toutes les options de ls possibles:

find -type f | xargs ls -1

Voici une réponse partielle qui montre les noms des répertoires.

 ls -mR * | sed -n 's/://p' 

Explication:

ls -mR * liste les noms de répertoires complets se terminant par un ‘:’, puis répertorie les fichiers de ce répertoire séparément

sed -n 's/://p' trouve des lignes qui se terminent par un deux-points, enlève les deux points et imprime la ligne

En parcourant la liste des répertoires, nous devrions également pouvoir trouver les répertoires. Travaille toujours dessus. Il est difficile d’obtenir les caractères génériques via xargs.

Exécutez une commande bash au format suivant:

 find /path -type f -exec ls -l \{\} \; 

L’ajout d’un caractère générique à la fin d’un répertoire ls force les chemins complets. En ce moment vous avez ceci:

 $ ls /home/dreftymac/ foo.txt bar.txt stackoverflow stackoverflow/alpha.txt stackoverflow/bravo.txt stackoverflow/charlie.txt 

Vous pouvez le faire à la place:

 $ ls /home/dreftymac/* /home/dreftymac/. /home/dreftymac/foo.txt /home/dreftymac/bar.txt /home/dreftymac/stackoverflow: alpha.txt bravo.txt charlie.txt 

Malheureusement, cela n’imprime pas le chemin complet pour les répertoires récursifs, donc ce n’est peut-être pas la solution complète que vous recherchez.

ls -lR est ce que vous cherchiez ou au moins j’étais. à votre santé

Beaucoup de réponses que je vois. Ceci est le mien, et je pense très utile si vous travaillez sur Mac.

Je suis sûr que vous savez qu’il existe des fichiers “bundle” ( .app , .rtfd , .workflow , etc.). Et en regardant dans la fenêtre de Finder, ils semblent uniques. Mais ils ne le sont pas. Et $ ls ou $ find voient comme des répertoires … Donc, à moins que vous ayez besoin de lister aussi leur contenu, cela fonctionne pour moi:

 find . -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/" 

Bien sûr, ceci est pour le répertoire de travail, et vous pouvez append des extensions à d’autres ensembles (mais toujours avec / après eux). Ou toute autre extension si ce n’est pas le paquet sans le / .

Plutôt intéressant le ” .lpdf/ ” (pdf multilingue). Il a une extension ” .pdf ” normale (!!) ou aucune dans le Finder. De cette façon, vous obtenez (ou il ne compte que 1 fichier) pour ce pdf et pas un tas de choses…

Si le répertoire est passé en tant que chemin relatif et que vous devez le convertir en un chemin absolu avant d’appeler find. Dans l’exemple suivant, le répertoire est transmis en tant que premier paramètre au script:

 #!/bin/bash # get absolute path directory=`cd $1; pwd` # print out list of files and directories find $directory 
 tar cf - $PWD|tar tvf - 

C’est lent mais fonctionne de manière récursive et imprime les répertoires et les fichiers. Vous pouvez le canaliser avec awk / grep si vous voulez juste les noms de fichiers sans tous les autres info / répertoires:

 tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$" 

@ ghostdog74: Petit tweak avec votre solution.
Le code suivant peut être utilisé pour rechercher un fichier avec son chemin absolu complet.

 sudo ls -R / | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }' | grep [file_to_search]

Je connaissais le nom du fichier mais je voulais aussi le répertoire.

trouver $ PWD | nom de fichier fgrep

a parfaitement fonctionné sous Mac OS 10.12.1

Ne le complique pas. Je viens de l’utiliser et j’ai eu une belle sortie:

 ls -lR /path/I/need