команда linux tree ограничивает количество файлов, отображаемых в каждом каталоге

1779
synaptik

Я хочу использовать tree(или подобное), чтобы увидеть структуру каталогов данного каталога, а также наличие файлов в каждом подкаталоге. Итак, как я могу использовать, treeно ограничить максимальное количество файлов для отображения в данном подкаталоге?

Если это невозможно сделать с treeпомощью изменения кода Python с этого сайта, как это сделать ?

6

2 ответа на вопрос

4
glallen

Вот рабочий пример с кодом Python, который вы цитировали:

Использование: tree.py -f [file limit] <directory>

Если для -f [ограничение файла] указано число, то ... <additional files>печатается, а остальные файлы пропускаются. Однако не следует пропускать дополнительные каталоги. Если ограничение файла установлено на 10000 (по умолчанию), это действует как ограничение

#! /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() 

При запуске он должен выдавать результат, похожий на:

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

Можно использовать tree --filelimit=Nдля ограничения количества отображаемых подкаталогов / файлов. К сожалению, это не откроет каталог, который имеет более N подкаталогов и файлов.

Для простых случаев, когда у вас есть несколько каталогов и в большинстве из них слишком много (скажем,> 100) файлов, вы можете использовать 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 

Обратите внимание, что если A1 / C2 имеет подкаталог A3, он не будет показан.

PS Это не полное решение, но оно будет быстрее для немногих.

Похожие вопросы