Comment lister tous les fichiers d'une arborescence (un répertoire et ses sous-répertoires)?


41

Pour une de mes tâches, je dois lister tous les fichiers dans une arborescence (un répertoire, tous ses sous-répertoires, tous les sous-répertoires de ceux-ci, etc.).

Je préférerais les voir dans Nautilus ou Krusader, mais une solution en ligne de commande est également intéressante (dans ce cas, j'aurai besoin de fichiers avec les noms complets, les tailles et les heures de modification).


Cette question a une terrible beaucoup de vues. Vous pourriez peut-être accepter la réponse que vous avez trouvée la plus utile, pour faire gagner du temps aux autres @Ivan?
starbeamrainbowlabs

Réponses:


39

arbre sera très pratique pour vous.

sudo apt-get install tree

utiliser tree filepathpour lister les fichiers.


27
ls -alR

C'est probablement la méthode la plus simple. Je viens de pirater un script de recherche pour vous donner plus de contrôle.


7
Ou juste ls -Rsi vous ne voulez pas tous les détails.
Matthew

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

Vous pouvez jouer avec le formatage printf autant que vous le souhaitez. Cela vous donne une excellente occasion de formater les éléments comme vous en avez besoin, ce qui est inestimable si vous utilisez le résultat dans une autre application.

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

Pour une meilleure lisibilité, vous pouvez columndiriger tout cela à travers la commande et elle redimensionnera automatiquement les éléments pour les aligner.

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

4

Comme Oli a répondu, findvous permettra de rechercher une arborescence de répertoires complète:

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

Vous pouvez également utiliser cette -type foption pour limiter les résultats aux seuls fichiers. Si vous souhaitez faire correspondre un modèle de fichier, vous devez choisir les options -nameou -iname(respectez la casse et respectez la casse, respectivement). Parcourez la findpage de manuel de l 'utilisateur. Il existe une quantité considérable d' options que vous pouvez utiliser pour affiner / affiner votre recherche.

En passant, si vous vous attendez à recevoir plusieurs analyses de données, rappelez-vous de canaliser vos résultats less.

@ Oli: +1 Je viens d'apprendre quelque chose de nouveau aussi column. Je n'avais pas utilisé ça avant.


3

lsest la commande standard pour répertorier les fichiers sous Ubuntu et sous d'autres systèmes d'exploitation Linux et Unix. lsest particulièrement utile à apprendre car il est installé sur tous les systèmes Unix rencontrés. Par défaut, cette opération affiche uniquement les fichiers du répertoire en cours.

Cependant, le -R«drapeau» est l’ option récursive (notez le capital R , non r ) qui affichera également tous les sous-répertoires.

Vous avez demandé des "détails" aussi - pour cela vous voulez le -l drapeau (c'est un L minuscule, pas le numéro un). Sachez que cela vous donne des informations sur les autorisations de fichier, ainsi que la taille du fichier, les informations de date / heure et le nom du fichier.

Si vous souhaitez également afficher les fichiers / dossiers cachés (l’équivalent de Ctrl+ Hdans Nautilus), ajoutez le-a drapeau 'tous'.

Vous pouvez fusionner des drapeaux pour vous donner quelque chose comme:

ls -lR

Si vous utilisez ceci sur n'importe quel dossier de taille correcte, vous constaterez que cela produit une très longue sortie qui défile très rapidement sur votre écran. Pour contourner ce problème, vous pouvez «canaliser» la sortie lsvia un programme appelé less(le nom est une parodie de la même morechose qui existait déjà mais qui a plus de fonctionnalités).

ls -lR | less

Cela vous permettra d'utiliser les touches fléchées haut / bas, aux côtés de Page Up / Down pour parcourir la sortie à une vitesse plus confortable.


0

Utilisation de Krusader:

  1. Utilisez la recherche (Ctl-S).
  2. Cochez "recherche dans les sous-répertoires".
  3. Cliquez sur "Rechercher".
  4. Lorsque la recherche est terminée, cliquez sur "Feed to listbox".

Cela vous permettra de traiter le tout en glissant vers l’autre panneau, etc.


0

Que diriez-vous d'un script 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"

Instructions d'installation: Comment puis-je installer un script Nautilus?


0

J'ai créé un programme spécialement pour cela - Directory Snapshot .
Il effectue une itération récursive dans un répertoire et stocke les noms et la taille de tous les fichiers et dossiers rencontrés dans des fichiers HTML parfaitement structurés, dont l'organisation est similaire à celle du répertoire d'entrée.
En d'autres termes, cela peut être considéré comme une version avec hyperlien des commandes dir /sou tree /f.


Vous avez écrit diret treeavec les options de type DOS, je dois donc demander: cela fonctionnera-t-il sur Ubuntu?
Wjandrea

Oui, j'ai effectivement programmé son exécution sur mon installation Ubuntu chaque week-end. Bien qu'il soit construit en C ++ et Boost, il sera donc un peu difficile de compiler et de créer un fichier binaire. C'est pourquoi je suis en train de le porter sur Python. Quoi qu'il en soit, je peux vous donner le binaire précompilé si vous le souhaitez.
Anmol Singh Jaggi

0

Nautile

  1. Activer les sous-dossiers en expansion dans la vue liste
    • Pour 14.04 et 16.04, voir ici
    • Pour 17.10 et 18.04, voir ici
  2. Cliquez sur un dossier et appuyez sur l'astérisque ( *sur le pavé numérique ou Shift+8 ) pour développer un niveau de sous-répertoires. Chaque fois que vous appuyez sur l'astérisque, le niveau suivant sera développé.

Cela fonctionne aussi à Nemo.


-1

vous pouvez les mettre dans votre fichier .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'

Maintenant, vous pouvez utiliser la commande get_tree dans n’importe quel répertoire et celui-ci affichera l’ensemble de la hiérarchie.

Syntaxe:

$ get_tree

Exemple de sortie:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

J'espère que cela t'aides !!


Ne va pas aider à moins que vous expliquiez ce que vous faites ..
Ron

-1 Mauvaise mise en forme du code, explication insuffisante. Et pourquoi faites-vous un alias?
wjandrea
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.