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.