GNU/Linux >> Znalost Linux >  >> Linux

linux tree příkaz limit počtu souborů zobrazených v každém adresáři

Zde je pracovní příklad s kódem pythonu, který jste citovali:

Použití:tree.py -f [file limit] <directory>

Pokud je zadáno číslo pro -f [limit souboru], pak ... <additional files> se vytiskne a ostatní soubory se vynechají. Další adresáře by však neměly být přeskočeny. Pokud je limit souboru nastaven na 10000 (výchozí), chová se to jako žádný 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()

Po spuštění by měl produkovat výstup podobný:

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

Lze použít tree --filelimit=N omezit počet podadresářů/souborů k zobrazení. Bohužel to neotevře adresář, který má více než N podadresářů a souborů.

Pro jednoduché případy, kdy máte více adresářů a většina z nich má příliš mnoho (řekněme> 100) souborů, můžete použít 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

Poznámka , pokud má A1/C2 podadresář A3, nebude zobrazen.

P.S. Toto není úplné řešení, ale bude rychlejší pro některé.


Linux
  1. Jak zvýšit limit počtu otevřených souborů v Linuxu

  2. Příkaz mcopy v Linuxu

  3. Příkaz přesunutí adresáře pro Linux

  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Linux ls Command - Seznam souborů

  3. Maximální počet souborů/adresářů na Linuxu?

  1. Cd Command v Linuxu (Change Directory)

  2. linuxový příkaz k vyprázdnění všech souborů v adresáři

  3. Jak spočítat počet souborů v každém adresáři?