ls Befehl: Wie kann ich eine rekursive Voll Weg erhalten die Auflistung, eine Zeile pro Datei?

StackOverflow https://stackoverflow.com/questions/1767384

  •  21-09-2019
  •  | 
  •  

Frage

Wie kann ich ls ausspucken eine flache Liste der rekursiven one-pro-Leitungswege?

Zum Beispiel möchte ich nur eine Wohnung mit ihren vollständigen Pfaden von Dateien Auflistung:

/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 fast tut, was ich brauche, aber ich will nicht, Pfad Fragmente, ich vollständige Pfade will.

War es hilfreich?

Lösung

Wenn Sie wirklich verwenden ls wollen, dann formatiert sein Ausgang mit awk:

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

Andere Tipps

Verwenden Sie finden:

find .
find /home/dreftymac

Wenn Sie Dateien nur (auslassen Verzeichnisse, Geräte, etc.):

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

ls -ld $(find .)

Wenn Sie möchten, dass Ihre Ausgabe von Änderungszeit sortieren:

ls -ltd $(find .)

Versuchen Sie, die folgende einfachere Art und Weise:

find "$PWD"

Best Befehl lautet: tree -fi

Um die Dateien zu verwenden, aber nicht die Links, haben Sie > von Ihrer Ausgabe zu entfernen:

tree -fi |grep -v \>

Wenn Sie die Natur jeder Datei wissen wollen, mit zwei whiles (nur ASCII-Dateien zum Beispiel lesen):

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

Oh, wirklich eine lange Liste von Antworten. Es hat mir sehr geholfen und ich schließlich meine eigene, die ich suchte:

Zur Liste aller Dateien in einem Verzeichnis und dessen Unterverzeichnisse:

find "$PWD" -type f

Um eine Liste aller Verzeichnisse in einem Verzeichnis und dessen Unterverzeichnisse:

find "$PWD" -type d

Um eine Liste aller Verzeichnisse und Dateien in einem Verzeichnis und dessen Unterverzeichnisse:

find "$PWD"

Ich weiß nicht, über den vollständigen Pfad, aber Sie können -R für Rekursion verwenden. Alternativ, wenn Sie auf ls nicht verbogen sind, können Sie nur find * tun.

Verwenden keine externen Befehle außer ls:

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

du -a

Handy für einige begrenzte Geräteschalen wo finden / orten sind nicht verfügbar.

find / den Trick

Ich denke, für eine einfache Liste der beste Weg ist:

find -D tree /fullpath/to-dir/ 

(oder, um es in einer txt-Datei zu speichern)

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

machen es nicht kompliziert. Ich dies nur verwendet und bekam eine schöne Ausgabe:

ls -lR /path/I/need

Der einfachste Weg, für alle zukünftigen Menschen, die Sie ist einfach:

du

Dies zeigt aber auch die Größe von, was in jedem Ordner enthalten Sie können nur die Ordnernamen awk zur Ausgabe verwenden:

du | awk '{print $2}'

Bearbeiten- Leider sorry, my bad. Ich dachte, es war nur Ordner, die benötigt wurden. Ill lassen dies hier falls jemand in den künftigen Bedarf es trotzdem ...

Mit der Freiheit, die alle möglichen ls Optionen verwenden:

find -type f | xargs ls -1

Führen Sie einen Befehl bash mit folgendem Format:

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

Hier ist eine Teilantwort, dass zeigt die Verzeichnisnamen.

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

Erklärung:

ls -mR * Listen, die die vollständigen Verzeichnisnamen mit der Endung in a ‚:‘, dann wird die Dateien in diesem Verzeichnis separat

sed -n 's/://p' Funde Linien, dass Ende in einem Doppelpunkt, den Doppelpunkt abzustreifen und drucken Sie die Zeile

Durch die Liste der Verzeichnisse iterieren, sollten wir in der Lage sein, die Verzeichnisse als auch zu finden. Workin noch daran. Es ist eine Herausforderung, die Platzhalter durch xargs zu erhalten.

eine Wildcard an das Ende eines ls Verzeichnisses Hinzufügen zwingt vollständige Pfade. Gerade jetzt haben Sie diese:

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

Sie können dies tun, anstatt:

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

Leider ist dies nicht den vollständigen Pfad für Verzeichnisse drucken rekursiv, so dass es nicht die volle Lösung sein kann, die Sie suchen.

ls -lR ist, was Sie suchen, oder zumindest ich war. cheers

Eine Menge Antworten, die ich zu sehen. Dies ist mein, und ich denke, ganz nützlich, wenn Sie auf dem Mac arbeiten.

Ich bin sicher, Sie wissen, gibt es einige "Bündel" Dateien ( .app .rtfd .workflow , und so weiter ). Und Blick in die Finder-Fenster erscheinen sie einzelne Dateien. Aber sie sind es nicht. Und $ ls oder $ find sehen sie als Verzeichnisse ... Also, wenn Sie deren Inhalt als auch Liste benötigen, das funktioniert für mich:

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

Natürlich ist dies für die Arbeits dir, und Sie könnten auch andere Bundles' Erweiterungen hinzufügen (aber immer mit einem / nach ihnen). Oder irgendwelche anderen Erweiterungen, wenn nicht Bundles ohne /.

Eher interessant, die ".lpdf/" (multilingual pdf). Es hat normal ".pdf" -Erweiterung (!!) oder keine im Finder. Auf diese Weise erhalten Sie (oder es zählt nur 1 Datei) für diese pdf und nicht ein paar Sachen ...

Wenn das Verzeichnis als relativer Pfad geleitet wird, und Sie werden es in einen absoluten Pfad konvertieren müssen, bevor Fund aufrufen. Im folgenden Beispiel wird das Verzeichnis als ersten Parameter an das Skript übergeben:

#!/bin/bash

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

Das ist langsam, aber funktioniert rekursiv und druckt beide Verzeichnisse und Dateien. Sie können über die Pipeline mit awk / grep, wenn Sie nur die Dateinamen möchten, ohne alle anderen Informationen / Verzeichnisse:

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

@ ghostdog74: Kleiner Kniff mit Ihrer Lösung.
Folgender Code verwendet werden kann Datei mit dem vollständigen absoluten Pfad zu suchen.

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

wusste, dass ich den Namen der Datei, aber das Verzeichnis als auch wollte.

$ PWD finden | fgrep Dateiname

funktionierte perfekt in Mac OS 10.12.1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top