Jak wyświetlić wszystkie pliki w drzewie (katalog i jego podkatalogi)?

41

Dla mojego zadania muszę wymienić wszystkie pliki w drzewie (katalog, wszystkie jego podkatalogi, wszystkie podkatalogi itp.).

Wolałbym widzieć je w Nautilusie lub Krusaderze, ale interesujące jest również rozwiązanie wiersza poleceń (w tym przypadku będę potrzebować pełnych nazw plików, rozmiarów i czasów modyfikacji).

Ivan
źródło
To pytanie ma strasznie dużo poglądów. Być może mógłbyś zaakceptować odpowiedź, która była dla ciebie najbardziej pomocna, aby zaoszczędzić innym czas @Ivan?
starbeamrainbowlabs

Odpowiedzi:

39

drzewo będzie dla ciebie bardzo wygodne.

sudo apt-get install tree

za pomocą, tree filepathaby wyświetlić listę plików.

kit.yang
źródło
27
ls -alR

To prawdopodobnie najprostsza metoda. Właśnie wykopuję skrypt znajdujący, aby dać ci większą kontrolę.

Oli
źródło
7
Lub tylko ls -Rjeśli nie chcesz wszystkich szczegółów.
Matthew
11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

Możesz grać z formatowaniem printf, ile chcesz. Daje to doskonałą okazję do sformatowania rzeczy tak, jak potrzebujesz, co jest nieocenione, jeśli używasz danych wyjściowych w innej aplikacji.

Więcej: http://linux.about.com/od/commands/l/blcmdl1_find.htm

Aby uzyskać lepszą czytelność, możesz columnpoprowadzić wszystko za pomocą polecenia, a ono automatycznie zmieni rozmiar rzeczy, aby były zgodne.

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t
Oli
źródło
4

Jak odpowiedział Oli, findpozwoli ci przeszukać całe drzewo katalogów:

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

Możesz także skorzystać z -type fopcji, aby ograniczyć wyniki do samych plików. Jeśli chcesz dopasować wzorzec pliku, potrzebujesz opcji -namelub -iname(odpowiednio rozróżnianie wielkości liter i dopasowanie bez rozróżniania wielkości liter). Przeczytaj findstronę podręcznika użytkownika - istnieje spora liczba opcji, których możesz użyć, aby zawęzić / zawęzić wyszukiwanie.

I na marginesie, jeśli spodziewasz się, że otrzymasz wiele screenów danych z powrotem do ciebie, pamiętaj, aby przesłać swoje wyniki less.

@Oli: +1 Właśnie nauczyłem się czegoś nowego - column. Nie używałam tego wcześniej.

Będzie
źródło
3

lsto standardowe polecenie do wyświetlania plików w systemie Ubuntu i innych systemach operacyjnych Linux i Unix. lsjest szczególnie przydatny do nauki, ponieważ znajdziesz go zainstalowany na każdym systemie uniksowym, jaki kiedykolwiek spotkałeś. Domyślnie po uruchomieniu wyświetla tylko pliki w bieżącym katalogu.

Jednak -R„flaga” jest opcją rekurencyjną (zwróć uwagę na dużą literę R , a nie r ), która pokaże również wszystkie podkatalogi.

Poprosiłeś też o „szczegóły” - do tego chcesz -lflagę (to mała litera L, a nie cyfra jeden). Pamiętaj, że daje to informacje o uprawnieniach do plików, a także rozmiar pliku, godzinę i datę oraz nazwę pliku.

Jeśli chcesz również pokazać ukryte pliki / foldery (odpowiednik Ctrl+ Hw Nautilusie), dodaj -aflagę „wszystko”.

Możesz łączyć flagi razem, aby uzyskać coś takiego:

ls -lR

Jeśli uruchomisz to w dowolnym folderze o przyzwoitej wielkości, przekonasz się, że powoduje to powstanie bardzo długiego wyjścia, które bardzo szybko przewija ekran. Aby obejść ten problem, możesz „potokować” wyjście lsza pomocą programu o nazwie less(nazwa jest parodią podobnego, morektóry był wcześniej, ale ma więcej funkcji).

ls -lR | less

Umożliwi to użycie klawiszy strzałek w górę / w dół oraz PageUp / Down w celu przejścia do wyjścia z bardziej komfortową prędkością.

8128
źródło
0

Za pomocą Krusadera:

  1. Użyj wyszukiwania (Ctl-S).
  2. Zaznacz „szukaj w podkatalogach”.
  3. Kliknij „Wyszukaj”.
  4. Po zakończeniu wyszukiwania kliknij „Feed to listbox”.

Umożliwi to przetworzenie całej partii przez przeciągnięcie do drugiego panelu itp.

Frank Z.
źródło
0

Co powiesz na skrypt Nautilus ?

#!/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"

Instrukcje instalacji: Jak mogę zainstalować skrypt Nautilus?

Glutanimate
źródło
0

Specjalnie dla tego stworzyłem program - Snapshot katalogu .
Rekurencyjnie iteruje po katalogu i przechowuje nazwy i rozmiary wszystkich napotkanych plików i folderów w uporządkowanych plikach HTML, które mają organizację podobną do tej z katalogu wejściowego.
Innymi słowy, można to uznać za hiperlinkowaną wersję poleceń dir /slub tree /f.

Anmol Singh Jaggi
źródło
Napisałeś diri treemasz opcje w stylu DOS, więc muszę zapytać, czy to zadziała na Ubuntu?
wjandrea
Tak, faktycznie zaplanowałem jego uruchamianie na mojej instalacji Ubuntu w każdy weekend. Chociaż jest zbudowany przy użyciu C ++ i Boost, więc trudno będzie go skompilować i utworzyć plik binarny. Właśnie dlatego przesyłam go do Pythona. Tak czy inaczej, mogę podać prekompilowany plik binarny, jeśli chcesz.
Anmol Singh Jaggi
0

Łodzik

  1. Włącz rozwijanie podfolderów w widoku listy
    • 14.04 i 16.04, patrz tutaj
    • 17.10 i 18.04, patrz tutaj
  2. Kliknij folder i naciśnij gwiazdkę ( *na klawiaturze numerycznej lub Shift+ 8), aby rozwinąć jeden poziom podkatalogów. Każde naciśnięcie gwiazdki spowoduje rozwinięcie następnego poziomu.

Działa to również w Nemo.

wjandrea
źródło
-1

możesz umieścić je w swoim pliku .bashrc

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'

Teraz możesz użyć polecenia get_tree w dowolnym katalogu, aby wyświetlić całą hierarchię.

Składnia:

$ get_tree

Przykładowe dane wyjściowe:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Mam nadzieję że to pomoże !!

Nitish Srivastava
źródło
Nie pomogę, chyba że wyjaśnisz, co robisz ...
Ron
-1 Złe formatowanie kodu, niewystarczające wyjaśnienie. A dlaczego tworzysz alias?
wjandrea