#!/usr/bin/env python
# -*- coding: utf8 -*-
# ____ ____ __ ____ __ _ ____ __ _ _ ____ __ __ _ ____
# ( __)( _ \( )( __)( ( \( \( ) ( \/ )___( __)( )( ( \( \
# ) _) ) / )( ) _) / / ) D (/ (_/\ ) /(___)) _) )( / / ) D (
# (__) (__\_)(__)(____)\_)__)(____/\____/(__/ (__) (__)\_)__)(____/
#
# The friendlier file finder.
from optparse import OptionParser, OptionGroup
def build_option_parser():
p = OptionParser()
# Main options
p.add_option('-r', '--root',
help='root the search in DIR',
metavar='DIR')
p.add_option('-d', '--depth',
help='search at most N directories deep',
metavar='N')
p.add_option('-f', '--follow',
action='store_true', default=False,
help='follow symlinked directories and search their contents')
p.add_option('-0', '--print0', dest='zero',
action='store_true', default=False,
help='separate matches with a null byte in output')
p.add_option('-l', '--literal',
action='store_true', default=False,
help='force literal search, even if it looks like a regex')
p.add_option('-i', '--insensitive',
action='store_true', default=False,
help='case insensitive matching')
p.add_option('-v', '--invert',
action='store_true', default=False,
help='invert match')
# Ignoring
g = OptionGroup(p, "Configuring Ignoring")
g.add_option('-b', '--no-binary',
action='store_true', default=False,
help='ignore binary files')
g.add_option('-a', '--all',
action='store_true', default=False,
help="don't ignore anything (ALL files can match)")
g.add_option('-u', '--unrestricted',
action='store_true', default=False,
help="unrestricted search (don't parse ignore files, but still skip VCS directories)")
g.add_option('-q', '--restricted',
action='store_true', default=False,
help="restricted search (don't parse VCS ignore files, but still skip VCS directories and parse .ffignore)")
p.add_option_group(g)
# Time filtering
g = OptionGroup(p, "Time Filtering")
g.add_option('--before',
help='match files modified < TIME',
metavar='TIME')
g.add_option('--after',
help='match files modified > TIME',
metavar='TIME')
g.add_option('--until',
help='match files modified <= TIME',
metavar='TIME')
g.add_option('--since',
help='match files modified >= TIME',
metavar='TIME')
g.add_option('--at',
help='match files modified at TIME',
metavar='TIME')
g.add_option('--created-before',
help='match files created < TIME',
metavar='TIME')
g.add_option('--created-after',
help='match files created > TIME',
metavar='TIME')
g.add_option('--created-until',
help='match files created <= TIME',
metavar='TIME')
g.add_option('--created-since',
help='match files created >= TIME',
metavar='TIME')
g.add_option('--created-at',
help='match files modified at TIME',
metavar='TIME')
p.add_option_group(g)
# Size filtering
g = OptionGroup(p, "Size Filtering",
"Sizes can be given as a number followed by a prefix. Some examples: "
"1k, 5kb, 1.5gb, 2g, 1024b")
g.add_option('--larger-than',
help='match files larger than SIZE (inclusive)',
metavar='SIZE')
g.add_option('--smaller-than',
help='match files smaller than SIZE (inclusive)',
metavar='SIZE')
p.add_option_group(g)
# Type filtering
g = OptionGroup(p, "Type Filtering",
"A thing is a file or a directory.")
g.add_option('-A', '--type-all', dest='type_all',
action='store_true', default=False,
help='match all things (default)')
g.add_option('-F', '--type-file', dest='type_file',
action='store_true', default=False,
help='match any kind of file')
g.add_option('-D', '--type-dir', dest='type_dir',
action='store_true', default=False,
help='match any kind of directory')
g.add_option('-R', '--type-real', dest='type_real',
action='store_true', default=False,
help='match real things')
g.add_option('-S', '--type-symlink', dest='type_symlink',
action='store_true', default=False,
help='match symlink things')
g.add_option('-E', '--type-file-real', dest='type_file_real',
action='store_true', default=False,
help='match real (non-symlink) files')
g.add_option('-C', '--type-dir-real', dest='type_dir_real',
action='store_true', default=False,
help='match real (non-symlink) directories')
g.add_option('-X', '--type-file-symlink', dest='type_file_symlink',
action='store_true', default=False,
help='match symlink files')
g.add_option('-Y', '--type-dir-symlink', dest='type_dir_symlink',
action='store_true', default=False,
help='match symlink directories')
p.add_option_group(g)
return p
def main():
(options, args) = build_option_parser().parse_args()
print options, args
if __name__ == '__main__':
main()