Wie liste ich alle Dateien in einem Baum auf (ein Verzeichnis und seine Unterverzeichnisse)?


41

Für eine meiner Aufgaben muss ich alle Dateien in einem Baum auflisten (ein Verzeichnis, alle seine Unterverzeichnisse, alle Unterverzeichnisse davon usw.).

Ich würde es vorziehen, sie in Nautilus oder Krusader zu sehen, aber auch eine Befehlszeilenlösung ist interessant (in diesem Fall muss der vollständige Name, die Größe und die Änderungszeit der Dateien angegeben werden).


Diese Frage hat eine schreckliche Menge von Ansichten. Vielleicht könnten Sie die Antwort akzeptieren, die Sie am hilfreichsten fanden, um anderen Zeit zu sparen, @Ivan?
Starbeamrainbowlabs

Antworten:


39

Baum wird sehr bequem für Sie sein.

sudo apt-get install tree

Verwenden Sie, tree filepathum die Dateien aufzulisten.


27
ls -alR

Das ist wahrscheinlich die einfachste Methode. Ich hacke gerade ein Suchskript aus, um Ihnen einen Hauch mehr Kontrolle zu geben.


7
Oder einfach, ls -Rwenn Sie nicht alle Details wollen.
Matthew

11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

Sie können mit der printf-Formatierung so viel spielen, wie Sie möchten. Dies gibt Ihnen eine großartige Möglichkeit, die Dinge so zu formatieren, wie Sie sie benötigen. Dies ist von unschätzbarem Wert, wenn Sie die Ausgabe in einer anderen Anwendung verwenden.

Weitere Informationen : http://linux.about.com/od/commands/l/blcmdl1_find.htm

Zur besseren Lesbarkeit können Sie alles durch den columnBefehl leiten und die Größe der Elemente wird automatisch so geändert, dass sie in einer Linie liegen.

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t

4

Wie Oli antwortete, findkönnen Sie einen gesamten Verzeichnisbaum durchsuchen:

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

# Where %TY will display the mod. time year as 4 digits
#       %Tm will display the mod. time month as 2 digits
#       %Td will display the mod. time day as 2 digits
#       %s displays the file size in bytes
#       %p displays the full path name of the file

Sie können die -type fOption auch verwenden, um die Ergebnisse auf Dateien zu beschränken. Wenn Sie ein Dateimuster abgleichen möchten, möchten Sie die Optionen -nameoder -iname(Übereinstimmung zwischen Groß- und Kleinschreibung bzw. Übereinstimmung zwischen Klein- und Kleinschreibung). Lesen Sie sich die findManpage durch - es gibt eine Vielzahl von Optionen, mit denen Sie Ihre Suche eingrenzen / verfeinern können.

Und wenn Sie davon ausgehen, dass Sie mehrere Bildschirme mit Daten erhalten, sollten Sie auch daran denken, Ihre Ergebnisse durchzuleiten less.

@Oli: +1 Ich habe gerade auch etwas Neues gelernt - column. Hatte das noch nie benutzt.


3

lsist der Standardbefehl zum Auflisten von Dateien unter Ubuntu und anderen Linux- und Unix-Betriebssystemen. lsDies ist besonders nützlich, da es auf jedem Unix-System installiert ist, dem Sie jemals begegnet sind. Standardmäßig werden hiermit nur die Dateien im aktuellen Verzeichnis angezeigt.

Das -R'Flag' ist jedoch die rekursive Option (beachten Sie das Großbuchstaben R , nicht r ), die Ihnen auch alle Unterverzeichnisse anzeigt.

Sie haben auch nach "Details" gefragt - dafür möchten Sie die -lFlagge (das ist ein L in Kleinbuchstaben, nicht die Nummer eins). Beachten Sie, dass Sie hiermit Informationen zu Dateiberechtigungen sowie zu Dateigröße, Uhrzeit / Datum und Dateinamen erhalten.

Wenn Sie auch versteckte Dateien / Ordner anzeigen möchten (entspricht Ctrl+ Hin Nautilus), fügen Sie das -aFlag "Alle" hinzu.

Sie können Flags zusammenführen, um Folgendes zu erhalten:

ls -lR

Wenn Sie dies in einem Ordner mit angemessener Größe ausführen, werden Sie feststellen, dass dies eine sehr lange Ausgabe erzeugt, die Ihren Bildschirm sehr schnell herunterrollt. Um dies zu umgehen, können Sie die Ausgabe lsüber ein Programm namens "Pipe" weiterleiten less(der Name ist eine Parodie der ähnlichen, moredie es zuerst gab, aber mehr Funktionen hat).

ls -lR | less

Auf diese Weise können Sie die Aufwärts- / Abwärtspfeiltasten neben PageUp / Down verwenden, um die Ausgabe mit einer bequemeren Geschwindigkeit zu durchlaufen.


0

Krusader benutzen:

  1. Verwenden Sie Suche (Ctl-S).
  2. Aktivieren Sie "In Unterverzeichnissen suchen".
  3. Klicken Sie auf "Suchen".
  4. Wenn die Suche beendet ist, klicken Sie auf "Feed to listbox".

Auf diese Weise können Sie das gesamte Los bearbeiten, indem Sie es in das andere Feld usw. ziehen.


0

Wie wäre es mit einem Nautilus-Skript ?

#!/bin/bash
#
# AUTHOR:       (c) 2013 Glutanimate (https://askubuntu.com/users/81372)
# NAME:         DirTree 0.1
# DEPENDENCIES: zenity tree  (install with sudo apt-get install zenity tree)
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
#
# DESCRIPTION:  Creates a directory tree at the current location. If you want you
#               can filter the output by a pattern (e.g. *.avi to only include avi
#               files).

TITLE=DirTree

# Get working directory
WORKINGDIR="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Filter pattern
zenity --question --title "$TITLE" --text "Do you want to filter by a specific file pattern?"

if [ "$?" = "1" ]
  then
      customtree="tree"
  else
      PATTERN=$(zenity --entry --title "$TITLE" --text="Please enter a file pattern (e.g. *.avi)")

         if [ -z "$PATTERN" ]
           then
               exit
           else
               customtree="tree -P $PATTERN"               
         fi

fi

# Directory tree
$customtree "$WORKINGDIR" > "$WORKINGDIR/directorytree_$TIME.txt"

Installationsanleitung: Wie kann ich ein Nautilus-Skript installieren?


0

Ich habe speziell dafür ein Programm erstellt - Directory Snapshot .
Es durchläuft ein Verzeichnis rekursiv und speichert die Namen und Größen aller gefundenen Dateien und Ordner in übersichtlichen HTML-Dateien, deren Organisation der des Eingabeverzeichnisses ähnelt.
Mit anderen Worten kann dies als eine mit Hyperlinks versehene Version des Befehls dir /soder angesehen tree /fwerden.


Sie haben geschrieben dirund treemit DOS-Optionen, also muss ich fragen, wird dies unter Ubuntu funktionieren?
wjandrea

Ja, ich habe es tatsächlich so geplant, dass es jedes Wochenende auf meiner Ubuntu-Installation ausgeführt wird. Obwohl es mit C ++ und Boost erstellt wurde, ist es etwas schwierig, eine Binärdatei zu kompilieren und zu erstellen. Deshalb portiere ich es gerade nach Python. Wie auch immer, ich kann Ihnen die vorkompilierte Binärdatei geben, wenn Sie wollen.
Anmol Singh Jaggi

0

Nautilus

  1. Aktivieren Sie das Erweitern von Unterordnern in der Listenansicht
    • Für 14.04 und 16.04, siehe hier
    • Für 17.10 und 18.04 siehe hier
  2. Klicken Sie auf einen Ordner und drücken Sie das Sternchen ( *auf dem Nummernblock oder Shift+ 8), um eine Ebene von Unterverzeichnissen zu erweitern. Jedes Mal, wenn Sie ein Sternchen drücken, wird die nächste Ebene erweitert.

Dies funktioniert auch in Nemo.


-1

Sie können diese in Ihre .bashrc-Datei einfügen

function _get_tree(){ ls -alR | while read LINE; do   echo $LINE | grep ":$" > /dev/null;   if [ $? -eq 0 ];   then     VAR=$(echo $LINE | grep ":$"| sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/' | tee /dev/tty);   fi;   echo $LINE | grep "^-" > /dev/null;   if [ $? -eq 0 ];   then     size=${#VAR};     for i in $(eval echo "{1..$size}"); do echo -n ' '; done;     echo -n '..';     echo $LINE | cut -d ' ' -f9;   fi; done; };

alias get_tree='_get_tree'

Jetzt können Sie den Befehl get_tree in einem beliebigen Verzeichnis verwenden und die gesamte Hierarchie anzeigen.

Syntax:

$ get_tree

Beispielausgabe:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Hoffe das hilft !!


Ich werde nicht helfen, es sei denn, Sie erklären, was Sie tun.
Ron

-1 Schlechte Code-Formatierung, nicht genügend Erklärung. Und warum machst du einen Alias?
wjandrea
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.