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

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

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

l’albero sarà molto conveniente per te.

sudo apt-get install tree 

usando tree filepath per elencare i file.

 ls -alR 

Questo è probabilmente il metodo più semplice. Sto solo tagliando uno script di ricerca per darti un touch in più.

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

Puoi giocare con la formattazione di printf quanto vuoi. Questo ti dà una big opportunità per ottenere le cose formattate nel modo in cui ne hai bisogno, il che è inestimabile se stai usando l’output in un’altra applicazione.

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

Per una migliore leggibilità, è ansible redirect tutto attraverso il comando della column e ridimensionerà automagicamente le cose in modo che si allineino.

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

Come ha risposto Oli, find ti 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 

Potresti anche voler usare l’opzione -type f per limitare i risultati ai soli file. Se si desidera abbinare un modello di file, si desidera che le opzioni -name o -iname (rispettando rispettivamente maiuscole e minuscole e maiuscole / minuscole). Leggi la pagina man di find – 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 respinti, ricorda di ridurne i risultati con less .

@Oli: +1 Ho appena imparato qualcosa di nuovo – column . Non l’avevo usato prima.

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

Tuttavia il -R ‘flag’ è l’opzione ricorsiva (si noti la R maiuscola, non r ) che mostrerà anche tutte le sottodirectory.

Hai chiesto anche “dettagli” – per questo vuoi il flag -l (che è un L minuscolo, non il numero uno). Tieni presente che questo ti dà le informazioni sui permessi dei file, nonché le dimensioni del file, le informazioni su data / ora e il nome del file.

Se vuoi anche mostrare file / cartelle nascoste (l’equivalente di Ctrl + H in Nautilus), aggiungi il flag -a ‘all’.

Puoi unire le bandiere insieme, per darti qualcosa come:

 ls -lR 

Se lo usi su qualsiasi cartella di dimensioni decenti, troverai un enorme output lungo che scorre velocemente sullo schermo. Per aggirare questo problema, è ansible “redirect” l’output di ls attraverso un programma chiamato less (il nome è una parodia del simile more che era prima intorno ma ha più funzioni).

 ls -lR | less 

Ciò consentirà di utilizzare i tasti freccia su / giù, accanto a PageUp / Down per scorrere l’output a una velocità più comoda.

Usando Krusader:

  1. Usa ricerca (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 trascinandolo nell’altro pannello, ecc.

Che ne dici di una sceneggiatura 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 (eg *.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 (eg *.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?

Ho creato un programma appositamente per questo: Directory Snapshot .
Cicli in modo ricorsivo attraverso 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, questo può essere pensato come una versione hyperlinked dei comandi dir /s o tree /f .

nautilo

  1. Abilita le sottocartelle espandibili nella visualizzazione elenco
    • Per il 14.04 e il 16.04, vedi qui
    • Per il 17.10 e il 18.04, vedi qui
  2. Fare clic su una cartella e premere asterisco ( * sul tastierino numerico o Maiusc + 8 ) per espandere un livello di sottodirectory. Ad ogni pressione dell’asterisco, si espande il livello successivo.
    • Fonte: risposta di htorque qui .

Funziona anche su Nemo.

puoi inserirli 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 in qualsiasi directory e visualizzerà l’intera gerarchia.

Sintassi:

 $ get_tree 

Uscita di esempio:

  . ..test.sh |-2 ..123.log |---3 |-----4 |-5 |---6 

Spero che questo ti aiuti !!