63 lines
2.3 KiB
Python
Executable File
63 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# Copyright 2014 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
"""Finds files in directories.
|
|
"""
|
|
|
|
import fnmatch
|
|
import optparse
|
|
import os
|
|
import sys
|
|
|
|
|
|
def main(argv):
|
|
parser = optparse.OptionParser()
|
|
parser.add_option('--pattern', default='*', help='File pattern to match.')
|
|
parser.add_option('--base-dir', help='base directory')
|
|
parser.add_option('--return-relpath',
|
|
action='store_true',
|
|
help='return relative address from base directory')
|
|
parser.add_option('--follow-symlinks',
|
|
action='store_true',
|
|
help='whether to follow links')
|
|
options, directories = parser.parse_args(argv)
|
|
|
|
for d in directories:
|
|
if not os.path.exists(d):
|
|
print('%s does not exist' % d)
|
|
return 1
|
|
if os.path.isfile(d):
|
|
if options.return_relpath:
|
|
if options.base_dir is not None:
|
|
if fnmatch.filter(d, options.pattern):
|
|
print(os.path.relpath(d, options.base_dir))
|
|
else:
|
|
print("Please specify the relative base directory")
|
|
return 1
|
|
else:
|
|
if fnmatch.filter(d, options.pattern):
|
|
print(d)
|
|
return 0
|
|
elif not os.path.isdir(d):
|
|
# if input path is not a directory nor a normal file, return error.
|
|
print('%s is not a directory or a file' % d)
|
|
return 1
|
|
for root, _, files in os.walk(d, followlinks=options.follow_symlinks):
|
|
for f in fnmatch.filter(files, options.pattern):
|
|
if options.return_relpath:
|
|
if options.base_dir is not None:
|
|
print(
|
|
os.path.relpath(os.path.join(root, f),
|
|
options.base_dir))
|
|
else:
|
|
print("Please specify the relative base directory")
|
|
return 1
|
|
else:
|
|
print(os.path.join(root, f))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv[1:]))
|