55 lines
1.6 KiB
Python
Executable File
55 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# Script to manage renaming existing files in given directory and
|
|
# propagating that change to database. Typical usage: renaming files
|
|
# from 'title.mp3' to title - artist.mp3'
|
|
#
|
|
# Actions:
|
|
#
|
|
# - record all filenames and inode numbers
|
|
# - external: rename the files
|
|
# - update records with new filenames for each inode number
|
|
# - update external database with new paths
|
|
|
|
import os
|
|
import sqlite3
|
|
|
|
PHASE = 2
|
|
|
|
# Check file of same name exists in parent directory
|
|
source_dir = '/home/kae/tmp/Singles' # os.getcwd()
|
|
db = "/home/kae/tmp/singles.sqlite"
|
|
|
|
|
|
def main():
|
|
with sqlite3.connect(db) as connection:
|
|
cursor = connection.cursor()
|
|
if PHASE == 1:
|
|
cursor.execute(
|
|
"CREATE TABLE IF NOT EXISTS mp3s "
|
|
"(inode INTEGER, oldname TEXT, newname TEXT)"
|
|
)
|
|
|
|
for fname in os.listdir(source_dir):
|
|
fullpath = os.path.join(source_dir, fname)
|
|
inode = os.stat(fullpath).st_ino
|
|
sql = f'INSERT INTO mp3s VALUES ({inode}, "{fname}", "")'
|
|
cursor.execute(sql)
|
|
|
|
if PHASE == 2:
|
|
for fname in os.listdir(source_dir):
|
|
fullpath = os.path.join(source_dir, fname)
|
|
inode = os.stat(fullpath).st_ino
|
|
sql = (
|
|
f'UPDATE mp3s SET newname = "{fname}" WHERE inode={inode}'
|
|
)
|
|
try:
|
|
cursor.execute(sql)
|
|
except sqlite3.OperationalError:
|
|
print(f"Error with {inode} -> {fname}")
|
|
|
|
cursor.close()
|
|
|
|
|
|
main()
|