61 lines
1.7 KiB
Python
Executable File
61 lines
1.7 KiB
Python
Executable File
#! /usr/bin/env python
|
|
import argparse
|
|
import sys
|
|
import logging
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def main() -> int:
|
|
# Handle program arguments
|
|
ap = argparse.ArgumentParser(prog="ezlink", description="Easier symlink took")
|
|
ap.add_argument("pointer", help="Link that points to the destination", type=Path)
|
|
ap.add_argument("destination", help="Destination of the link", type=Path)
|
|
ap.add_argument(
|
|
"-f", "--force", help="Force the link to be created", action="store_true"
|
|
)
|
|
ap.add_argument(
|
|
"--hard", help="Link directly to the destination inode", action="store_true"
|
|
)
|
|
ap.add_argument("--absolute", "-a", help="Use absolute paths", action="store_true")
|
|
ap.add_argument(
|
|
"--dereference-destination",
|
|
help="Follow the destination if it is also a pointer",
|
|
action="store_true",
|
|
)
|
|
ap.add_argument(
|
|
"--dry-run", help="Don't actually create the link", action="store_true"
|
|
)
|
|
args = ap.parse_args()
|
|
|
|
# Convert to absolute paths if requested
|
|
if args.absolute:
|
|
args.pointer = args.pointer.absolute()
|
|
args.destination = args.destination.absolute()
|
|
|
|
# Construct the appropriate LN command
|
|
command = ["ln"]
|
|
if not args.dereference_destination:
|
|
command.append("-n")
|
|
if not args.hard:
|
|
command.append("-s")
|
|
if args.force:
|
|
command.append("-f")
|
|
command.append(str(args.destination))
|
|
command.append(str(args.pointer))
|
|
|
|
# Print the command
|
|
print(" ".join(command))
|
|
|
|
# Run the command if not a dry run
|
|
if not args.dry_run:
|
|
return subprocess.run(command).returncode
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|