Files
phs_v1.0.1.0/build/scripts/find.py
2024-09-27 19:16:49 +08:00

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:]))