diff --git a/README.md b/README.md index 28f64cf..b9e660a 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ See the [example](#example) for an overview of the available features. * [Find files](#find-files) * [Display entire tree](#display-entire-tree) * [Catalog graph](#catalog-graph) - + * [Example](#example) * [Contribution](#contribution) @@ -243,10 +243,10 @@ $ catcli find 9 test/c/9 [size:0] ``` -When using the `-s` switch, a one-liner is generated +When using the `--script` switch, a one-liner is generated that allows to handle the found file(s) ```bash -$ catcli find 9 -s +$ catcli find 9 --script test/c/9 [size:0] op=file; source=/media/mnt; $op ${source}/test/c/9 ``` diff --git a/catcli/catcli.py b/catcli/catcli.py index 36616be..e7d9904 100755 --- a/catcli/catcli.py +++ b/catcli/catcli.py @@ -37,10 +37,10 @@ USAGE = """ Usage: {1} index [--catalog=] [--meta=...] [-fcuV] - {1} ls [--catalog=] [-rV] [] - {1} find [--catalog=] [-sV] + {1} ls [--catalog=] [-rVS] [] + {1} find [--catalog=] [-bVS] {1} rm [--catalog=] [-fV] - {1} tree [--catalog=] [-V] [] + {1} tree [--catalog=] [-VS] [] {1} rename [--catalog=] [-fV] {1} edit [--catalog=] [-fV] {1} graph [--catalog=] [-V] [] @@ -53,7 +53,8 @@ Options: --meta= Additional attribute to store [default: ]. -u --subsize Store size of folders [default: False]. -f --force Force overwrite [default: False]. - -s --script Output script to manage found file(s) [default: False]. + -b --script Output script to manage found file(s) [default: False]. + -S --sortsize Sort by size, largest first [default: False]. -c --hash Calculate md5 hash [default: False]. -r --recursive Recursive [default: False]. -V --verbose Be verbose [default: False]. @@ -182,7 +183,7 @@ def main(): banner() # init noder - noder = Noder(verbose=args['--verbose']) + noder = Noder(verbose=args['--verbose'], sortsize=args['--sortsize']) # init catalog catalog = Catalog(args['--catalog'], verbose=args['--verbose'], force=args['--force']) diff --git a/catcli/noder.py b/catcli/noder.py index 8194c62..59551ad 100644 --- a/catcli/noder.py +++ b/catcli/noder.py @@ -34,9 +34,10 @@ class Noder: TYPE_STORAGE = 'storage' TYPE_META = 'meta' - def __init__(self, verbose=False): + def __init__(self, verbose=False, sortsize=False): self.hash = True self.verbose = verbose + self.sortsize = sortsize def set_hashing(self, val): self.hash = val @@ -165,7 +166,7 @@ class Noder: def print_tree(self, node, style=anytree.ContRoundStyle()): ''' print the tree similar to unix tool "tree" ''' - rend = anytree.RenderTree(node, childiter=self.sort_tree) + rend = anytree.RenderTree(node, childiter=self._sort_tree) for pre, fill, node in rend: self._print_node(node, pre=pre, withdepth=True) @@ -214,7 +215,7 @@ class Noder: if rec: self.print_tree(found[0].parent) return - found = sorted(found, key=self.sort_walk) + found = sorted(found, key=self._sort, reverse=self.sortsize) self._print_node(found[0].parent, withpath=False, withdepth=True) for f in found: @@ -226,14 +227,28 @@ class Noder: ############################################################### # diverse ############################################################### - def sort_tree(self, items): + def _sort_tree(self, items): ''' sorting a list of items ''' - return sorted(items, key=self.sort_walk) + return sorted(items, key=self._sort, reverse=self.sortsize) - def sort_walk(self, n): - ''' for sorting a node ''' + def _sort(self, x): + if self.sortsize: + return self._sort_size(x) + return self._sort_fs(x) + + def _sort_fs(self, n): + ''' sorting nodes dir first and alpha ''' return (n.type, n.name.lstrip('\.').lower()) + def _sort_size(self, n): + ''' sorting nodes by size ''' + try: + if not n.size: + return 0 + return n.size + except AttributeError: + return 0 + def to_dot(self, node, path='tree.dot'): ''' export to dot for graphing ''' anytree.exporter.DotExporter(node).to_dotfile(path)