| #!/usr/bin/python3 |
| |
| # Copyright (c) 2023 Oracle. All rights reserved. |
| # SPDX-License-Identifier: GPL-2.0 |
| # |
| # Create a bunch of xattrs in a file. |
| |
| import argparse |
| import sys |
| import os |
| |
| parser = argparse.ArgumentParser(description = 'Mass create xattrs in a file') |
| parser.add_argument( |
| '--file', required = True, type = str, help = 'manipulate this file') |
| parser.add_argument( |
| '--start', type = int, default = 0, |
| help = 'create xattrs starting with this number') |
| parser.add_argument( |
| '--incr', type = int, default = 1, |
| help = 'increment attr number by this much') |
| parser.add_argument( |
| '--end', type = int, default = 1000, |
| help = 'stop at this attr number') |
| parser.add_argument( |
| '--remove', dest = 'remove', action = 'store_true', |
| help = 'remove instead of creating') |
| parser.add_argument( |
| '--format', type = str, default = '%08d', |
| help = 'printf formatting string for attr name') |
| parser.add_argument( |
| '--verbose', dest = 'verbose', action = 'store_true', |
| help = 'verbose output') |
| |
| args = parser.parse_args() |
| |
| fmtstring = "user.%s" % args.format |
| |
| # If we are passed a regular file, open it as a proper file descriptor and |
| # pass that around for speed. Otherwise, we pass the path. |
| fp = None |
| try: |
| fp = open(args.file, 'r') |
| fd = fp.fileno() |
| os.listxattr(fd) |
| if args.verbose: |
| print("using fd calls") |
| except: |
| if args.verbose: |
| print("using path calls") |
| fd = args.file |
| |
| for i in range(args.start, args.end + 1, args.incr): |
| fname = fmtstring % i |
| |
| if args.remove: |
| if args.verbose: |
| print("removexattr %s" % fname) |
| os.removexattr(fd, fname) |
| else: |
| if args.verbose: |
| print("setxattr %s" % fname) |
| os.setxattr(fd, fname, b'abcdefgh') |