Skip to content

Instantly share code, notes, and snippets.

@rtviii
Created November 8, 2023 19:42
Show Gist options
  • Save rtviii/b4000061a77e9bb4c9c720b67f86ec46 to your computer and use it in GitHub Desktop.
Save rtviii/b4000061a77e9bb4c9c720b67f86ec46 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import os
import exiftool
import argparse
parser = argparse.ArgumentParser(description='Title argparse')
parser.add_argument('-info','--i', action='store_true',default=False, help='Print `exiftool` info.')
parser.add_argument('-r','--r', action='store_true',default=False, help='Proceed to rename rename', )
parser.add_argument('filename',type=str, help='path to document', )
args = parser.parse_args()
if not os.path.isfile(args.filename):
exit("File not found: {}".format(args.filename))
title, author, year = None,None, None
with exiftool.ExifToolHelper() as et:
meta = et.get_metadata(os.path.join(os.getcwd(), args.filename))[0]
if args.i:
for k,v in meta.items():
print(k,":\t\t", v)
if "PDF:Author" in meta and meta["PDF:Author"] != "":
author = meta["PDF:Author"]
F_author = 1
if "XMP:MetadataDate" in meta and meta["XMP:MetadataDate"] != "":
year = meta["XMP:MetadataDate"]
elif "PDF:CreationDate" in meta and meta["PDF:CreationDate"] != "":
year = meta["PDF:CreationDate"]
elif "PDF:CreateDate" in meta and meta["PDF:CreateDate"] != "":
year = meta["PDF:CreateDate"]
if "XMP:Title" in meta and meta["XMP:Title"] != "":
title = meta["XMP:Title"]
elif "PDF:Title" in meta and meta["PDF:Title"] != "":
title = meta["PDF:Title"]
# ---------- Warning string
warning = []
if title == None:
warning.append("TITLE")
else:
title = ''.join([i if ord(i) < 128 else '_' for i in title.lower().replace(" ","_")])
if author == None:
warning.append("AUTHOR")
else:
author = author.split(" ")[-1]
if year == None:
warning.append("YEAR")
else:
year = year.split(":")[0]
if None in [title, author, year]:
print("[\x1b[33mWARNING\x1b[0m]: could not find {} among the metadata.".format(", ".join(warning)))
# ---------- Warning string
# ----------------Format of the new name ------------------
new_name = (year +"_" if year !=None else "") + (author +"_" if author != None else "" ) + (title if title!=None else "") + ".pdf"
# ----------------Format of the new name ------------------
former_path = os.path.normpath(os.path.join(os.getcwd(), args.filename))
new_path = os.path.join(os.path.dirname(former_path), new_name)
_fps = "{}/{}".format(os.path.dirname(former_path),os.path.basename(former_path))
_nps = "{}/\x1b[3{}m{}\x1b[0m".format(os.path.dirname(former_path), 2 if None not in [title, author, year] else 1, new_name)
if args.r:
print("Renaming \t{} \nto \t\t{}\nProceed? y/n".format(_fps,_nps))
if input() != "y":
...
else:
os.rename(former_path, new_path)
  1. Install pyexiftool bindings to exiftool(pick your OS package manager):
  • brew install pyexiftool
  • sudo apt install pyexiftool
  • yay i pyexiftool etc.
  1. Clone or copy repdf script to your $PATH or wherever else that works: export PATH=${PATH}:/home/potato/scripts/repdf

  2. Grant exec permissions: sudo chmod +x repdf

Usage

ᢹ ritual.rtviii[ notes/papers ]  ./repdf -r s41586-023-06127-z-1.pdf
Renaming        /home/rtviii/notes/papers/s41586-023-06127-z-1.pdf
to              /home/rtviii/notes/papers/2023_Zhang_algorithm_for_optimized_mrna_design_improves_stability_and_immunogenicity.pdf
Proceed? y/n
# -------------------- 
# -r to rename in place
# -i to see native exiftool info
# ---------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment