GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der Linux-Baumbefehl begrenzt die Anzahl der Dateien, die in jedem Verzeichnis angezeigt werden

Hier ist ein funktionierendes Beispiel mit dem von Ihnen zitierten Python-Code:

Verwendung:tree.py -f [file limit] <directory>

Wenn für -f [Dateilimit] eine Zahl angegeben ist, dann ... <additional files> gedruckt und die anderen Dateien werden übersprungen. Zusätzliche Verzeichnisse sollten jedoch nicht übersprungen werden. Wenn das Dateilimit auf 10000 (Standard) eingestellt ist, fungiert dies als kein Limit

#! /usr/bin/env python
# tree.py
#
# Written by Doug Dahms
# modified by glallen @ StackExchange
#
# Prints the tree structure for the path specified on the command line

from os import listdir, sep
from os.path import abspath, basename, isdir
from sys import argv

def tree(dir, padding, print_files=False, limit=10000):
    print padding[:-1] + '+-' + basename(abspath(dir)) + '/'
    padding = padding + ' '
    limit = int(limit)
    files = []
    if print_files:
        files = listdir(dir)
    else:
        files = [x for x in listdir(dir) if isdir(dir + sep + x)]
    count = 0
    for file in files:
        count += 1
        path = dir + sep + file
        if isdir(path):
            print padding + '|'
            if count == len(files):
                tree(path, padding + ' ', print_files, limit)
            else:
                tree(path, padding + '|', print_files, limit)
        else:
            if limit == 10000:
                print padding + '|'
                print padding + '+-' + file
                continue
            elif limit == 0:
                print padding + '|'
                print padding + '+-' + '... <additional files>'
                limit -= 1
            elif limit <= 0:
                continue
            else:
                print padding + '|'
                print padding + '+-' + file
                limit -= 1

def usage():
    return '''Usage: %s [-f] [file-listing-limit(int)] <PATH>
Print tree structure of path specified.
Options:
-f          Print files as well as directories
-f [limit]  Print files as well as directories up to number limit
PATH        Path to process''' % basename(argv[0])

def main():
    if len(argv) == 1:
        print usage()
    elif len(argv) == 2:
        # print just directories
        path = argv[1]
        if isdir(path):
            tree(path, ' ')
        else:
            print 'ERROR: \'' + path + '\' is not a directory'
    elif len(argv) == 3 and argv[1] == '-f':
        # print directories and files
        path = argv[2]
        if isdir(path):
            tree(path, ' ', True)
        else:
            print 'ERROR: \'' + path + '\' is not a directory'
    elif len(argv) == 4 and argv[1] == '-f':
        # print directories and files up to max
        path = argv[3]
        if isdir(path):
            tree(path, ' ', True, argv[2])
        else:
            print 'ERROR: \'' + path + '\' is not a directory'
    else:
        print usage()

if __name__ == '__main__':
    main()

Wenn es ausgeführt wird, sollte es eine Ausgabe ähnlich der folgenden erzeugen:

[email protected] /usr/share/doc $ python /tmp/recipe-217212-1.py -f 2 . | head -n 40
+-doc/
  |
  +-libgnuradio-fft3.7.2.1/
  | |
  | +-copyright
  | |
  | +-changelog.Debian.gz
  |
  +-libqt4-script/
  | |
  | +-LGPL_EXCEPTION.txt
  | |
  | +-copyright
  | |
  | +-... <additional files>
  |
  +-xscreensaver-gl/
  | |
  | +-copyright
  | |
  | +-changelog.Debian.gz
  | |
  | +-... <additional files>

Man kann tree --filelimit=N verwenden um die Anzahl der anzuzeigenden Unterverzeichnisse/Dateien zu begrenzen. Leider öffnet dies kein Verzeichnis, das mehr als N Unterverzeichnisse und Dateien hat.

Für einfache Fälle, wenn Sie mehrere Verzeichnisse haben und die meisten zu viele (z. B.> 100) Dateien haben, können Sie tree --filelimit=100 verwenden .

.
├── A1
│   ├── A2
│   ├── B2
│   ├── C2 [369 entries exceeds filelimit, not opening dir]
│   └── D2 [3976 entries exceeds filelimit, not opening dir]
├── B1
│   └── A2
│       ├── A3.jpeg
│       └── B3.png
└── C1.sh

Hinweis , wenn A1/C2 ein Unterverzeichnis A3 hat, wird es nicht angezeigt.

P.S. Dies ist keine vollständige Lösung, wird aber für wenige schneller sein.


Linux
  1. So erhöhen Sie das Limit für die Anzahl der geöffneten Dateien in Linux

  2. Linux-ls-Befehl - Dateien auflisten

  3. mcopy-Befehl unter Linux

  4. Linux-Befehl zum Verschieben des Verzeichnisses

  5. Linux-Befehl zum Leeren aller Dateien eines Verzeichnisses

Wie man Dateien in Linux rekursiv auflistet

So zählen Sie Dateien im Verzeichnis unter Linux

Zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux

So zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux

ls-Befehl unter Linux/UNIX

Linux:Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen finden