syn*_*tik 15 linux command-line tree directory-listing
我想使用tree
(或类似的)来查看给定目录的目录结构以及每个子目录中是否有文件。那么,我如何使用tree
但限制给定子目录中显示的最大文件数?
如果不能用tree
,怎么能通过修改这个站点的 Python 代码来完成?
可以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
Run Code Online (Sandbox Code Playgroud)
注意,如果 A1/C2 有子目录 A3,则不会显示。
PS这不是一个完整的解决方案,但对少数人来说会更快。
这是您引用的python代码的工作示例:
用法: tree.py -f [file limit] <directory>
如果为 -f [file limit] 指定了数字,则... <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()
Run Code Online (Sandbox Code Playgroud)
运行时,它应该产生类似于以下内容的输出:
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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5042 次 |
最近记录: |