GNU/Linux >> Linux の 問題 >  >> Linux

linux tree コマンドで各ディレクトリに表示されるファイル数を制限する

引用した 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()

実行すると、次のような出力が生成されます:

[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>

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 がある場合、それは表示されません。

追伸 これは完全な解決策ではありませんが、一部の人にとってはより速くなります。


Linux
  1. Linuxで開くファイルの数の制限を増やす方法

  2. ディレクトリとサブディレクトリ内のファイル数を見つける方法

  3. Linux ls コマンド - ファイルの一覧表示

  1. Linux の mcopy コマンド

  2. Linux ディレクトリ移動コマンド

  3. Linux でのファイル/ディレクトリの最大数は?

  1. LinuxでのCdコマンド(ディレクトリの変更)

  2. ディレクトリのすべてのファイルを空にする linux コマンド

  3. 各ディレクトリ内のファイル数を数える方法は?