Come elencare tutti i file in un albero (una directory e i suoi sottodir)?


41

Per un mio compito ho bisogno di elencare tutti i file in un albero (una directory, tutti i suoi sottodir, tutti i sotto-sotto di quelli, ecc.).

Preferirei vederli in Nautilus o Krusader, ma è interessante anche una soluzione a riga di comando (in questo caso avrò bisogno di elencare i nomi completi, le dimensioni e i tempi di modifica dei file).


Questa domanda ha un terribile sacco di punti di vista. Forse potresti accettare la risposta che hai trovato più utile, per risparmiare tempo agli altri @Ivan?
starbeamrainbowlabs

Risposte:


39

l'albero sarà molto conveniente per te.

sudo apt-get install tree

usando tree filepathper elencare i file.


27
ls -alR

Questo è probabilmente il metodo più semplice. Sto solo hackerando uno script di ricerca per darti un tocco in più di controllo.


7
O solo ls -Rse non vuoi tutti i dettagli.
Matteo,

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

Puoi giocare con la formattazione di printf quanto vuoi. Questo ti dà una grande opportunità per formattare le cose nel modo che ti serve, il che è prezioso se stai usando l'output in un'altra applicazione.

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

Per una migliore leggibilità, puoi reindirizzare tutto attraverso il columncomando e ridimensionerà automaticamente le cose in modo che si allineino.

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

4

Come Oli ha risposto, findti permetterà di cercare un intero albero di directory:

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

È inoltre possibile utilizzare l' -type fopzione per limitare i risultati ai soli file. Se si desidera abbinare un modello di file, si desidera rispettivamente le opzioni -nameo -iname(maiuscole e minuscole e maiuscole e minuscole). Leggi findla pagina man - ci sono molte opzioni che puoi usare per restringere / affinare la tua ricerca.

E a parte questo, se ti aspetti di avere più schermate di dati che ti vengono restituite, ricordati di convogliare i risultati less.

@Oli: +1 Ho appena imparato anche qualcosa di nuovo - column. Non l'avevo mai usato prima.


3

lsè il comando standard per elencare i file in Ubuntu e altri sistemi operativi Linux e Unix. lsè particolarmente utile da imparare perché lo troverai installato su ogni sistema Unix che tu abbia mai incontrato. Per impostazione predefinita, l'esecuzione mostra solo i file nella directory corrente.

Tuttavia, la -R'bandiera' è l' opzione ricorsiva (notare la R maiuscola , non la r ) che mostrerà anche tutte le sottodirectory.

Hai anche chiesto "dettagli" - per questo vuoi la -lbandiera (che è una L minuscola, non il numero uno). Tenere presente che ciò fornisce informazioni sulle autorizzazioni dei file, nonché dimensioni del file, informazioni su ora / data e nome del file.

Se vuoi mostrare anche file / cartelle nascosti (l'equivalente di Ctrl+ Hin Nautilus), aggiungi il -aflag 'all'.

Puoi unire le bandiere per darti qualcosa del tipo:

ls -lR

Se lo esegui su qualsiasi cartella di dimensioni decenti, scoprirai che questo produce un enorme output lungo che scorre molto velocemente sullo schermo. Per ovviare a questo, puoi "convogliare" l'output lsattraverso un programma chiamato less(il nome è una parodia del simile moreche era in giro per primo ma ha più funzionalità).

ls -lR | less

Ciò ti consentirà di utilizzare i tasti freccia su / giù, insieme a Pagina su / Giù per scorrere l'output a una velocità più confortevole.


0

Usando Krusader:

  1. Usa Cerca (Ctl-S).
  2. Seleziona "cerca nelle sottodirectory".
  3. Fai clic su "Cerca".
  4. Al termine della ricerca, fai clic su "Feed to listbox".

Ciò ti consentirà di elaborare l'intero lotto trascinando sull'altro pannello, ecc.


0

Che ne dici di una sceneggiatura di 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"

Istruzioni per l'installazione: come posso installare uno script Nautilus?


0

Ho creato un programma appositamente per questo - Directory Snapshot .
Esegue in modo ricorsivo una directory e memorizza i nomi e le dimensioni di tutti i file e le cartelle che incontra in file HTML ben strutturati, che hanno un'organizzazione simile a quella della directory di input.
In altre parole, questa può essere pensata come una versione con collegamento ipertestuale dei comandi dir /so tree /f.


Hai scritto dire treecon opzioni in stile DOS, quindi devo chiedertelo, funzionerà su Ubuntu?
wjandrea,

Sì, in realtà l'ho programmato per essere eseguito sulla mia installazione di Ubuntu ogni fine settimana. Anche se, è costruito usando C ++ e Boost, quindi sarà un po 'difficile compilare e creare un binario. Questo è il motivo per cui sto eseguendo il porting su Python. Comunque, posso darti il ​​binario precompilato se vuoi.
Anmol Singh Jaggi,

0

nautilo

  1. Abilita l'espansione delle sottocartelle nella visualizzazione elenco
    • Per 14.04 e 16.04, vedi qui
    • Per 17.10 e 18.04, vedi qui
  2. Fare clic su una cartella e premere asterisco ( *sul tastierino numerico o Shift+ 8) per espandere un livello di sottodirectory. Ogni volta che si preme l'asterisco, si espande il livello successivo.

Questo funziona anche in Nemo.


-1

puoi metterli nel tuo file .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'

Ora puoi usare il comando get_tree all'interno di qualsiasi directory e mostrerà l'intera gerarchia.

Sintassi:

$ get_tree

Uscita campione:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Spero che sia di aiuto !!


Non ti aiuterà se non mi spieghi cosa stai facendo ..
Ron,

-1 Scarsa formattazione del codice, spiegazione insufficiente. E perché fai un alias?
wjandrea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.