Linux-Baumbefehlslimit Anzahl der in jedem Verzeichnis angezeigten Dateien

1896
synaptik

Ich möchte tree(oder ähnliches) verwenden, um die Verzeichnisstruktur eines bestimmten Verzeichnisses sowie die Angabe, ob jedes Unterverzeichnis Dateien enthält, anzuzeigen. Wie kann ich also treedie maximale Anzahl von Dateien festlegen, die in einem bestimmten Unterverzeichnis angezeigt werden sollen?

Wenn dies nicht möglich ist tree, wie können Sie den Python-Code von dieser Site aus ändern ?

6

2 Antworten auf die Frage

4
glallen

Hier ist ein Arbeitsbeispiel mit dem von Ihnen genannten Python-Code:

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

Wenn für -f [Dateibegrenzung] eine Zahl angegeben ... <additional files>ist, wird gedruckt und die anderen Dateien werden übersprungen. Zusätzliche Verzeichnisse sollten jedoch nicht übersprungen werden. Wenn das Dateilimit auf 10000 (Standard) gesetzt ist, ist dies 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 eine Ausgabe ähnlich der folgenden erzeugt werden:

user@host /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> 
1
saurabheights

Sie können tree --filelimit=Ndie Anzahl der anzuzeigenden Unterverzeichnisse / Dateien begrenzen. Leider wird das Verzeichnis nicht geöffnet, das mehr als N Unterverzeichnisse und Dateien enthält.

In einfachen Fällen können Sie mehrere Verzeichnisse verwenden, von denen die meisten zu viele Dateien (beispielsweise> 100) enthalten tree --filelimit=100.

. ├── 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 

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

PS Dies ist keine Komplettlösung, wird jedoch für wenige schneller sein.