96 lines
3.0 KiB
Python
Executable File
96 lines
3.0 KiB
Python
Executable File
#!/usr/bin/python3
|
|
import os
|
|
import sys
|
|
|
|
|
|
def remove_suffix_back(directory, suffix):
|
|
"""Removes the specified suffix from the end of filenames before the extension."""
|
|
for filename in os.listdir(directory):
|
|
filepath = os.path.join(directory, filename)
|
|
|
|
# Skip directories
|
|
if not os.path.isfile(filepath):
|
|
continue
|
|
|
|
# Separate base name and extension
|
|
base, ext = os.path.splitext(filename)
|
|
|
|
# Remove suffix from the back of the base name
|
|
if base.endswith(suffix):
|
|
new_name = base[: -len(suffix)] + ext
|
|
os.rename(filepath, os.path.join(directory, new_name))
|
|
print(f"Renamed: {filename} -> {new_name}")
|
|
|
|
|
|
def remove_prefix_front(directory, prefix):
|
|
"""Removes the specified prefix from the start of filenames."""
|
|
for filename in os.listdir(directory):
|
|
filepath = os.path.join(directory, filename)
|
|
|
|
# Skip directories
|
|
if not os.path.isfile(filepath):
|
|
continue
|
|
|
|
# Remove prefix if it exists
|
|
if filename.startswith(prefix):
|
|
new_name = filename[len(prefix):]
|
|
os.rename(filepath, os.path.join(directory, new_name))
|
|
print(f"Renamed: {filename} -> {new_name}")
|
|
|
|
|
|
def remove_from_extension(directory, suffix):
|
|
"""Removes the specified string from the file extensions."""
|
|
for filename in os.listdir(directory):
|
|
filepath = os.path.join(directory, filename)
|
|
|
|
# Skip directories
|
|
if not os.path.isfile(filepath):
|
|
continue
|
|
|
|
# Separate base name and extension
|
|
base, ext = os.path.splitext(filename)
|
|
|
|
# Remove suffix from the extension
|
|
if ext.endswith(suffix):
|
|
new_ext = ext[: -len(suffix)]
|
|
new_name = base + new_ext
|
|
os.rename(filepath, os.path.join(directory, new_name))
|
|
print(f"Renamed: {filename} -> {new_name}")
|
|
|
|
|
|
def main():
|
|
# Validate arguments
|
|
if len(sys.argv) < 3:
|
|
print("Usage: deappend.py <mode> <string> [directory]")
|
|
sys.exit(1)
|
|
|
|
# Get arguments
|
|
mode = sys.argv[1] # Mode: back, front, ext/extension
|
|
string = sys.argv[2] # String to remove
|
|
directory = sys.argv[3] if len(sys.argv) > 3 else os.getcwd() # Default: current directory
|
|
|
|
# Check that the string is not empty
|
|
if string == "":
|
|
print("Error: The string to remove cannot be empty.")
|
|
sys.exit(1)
|
|
|
|
# Validate directory
|
|
if not os.path.isdir(directory):
|
|
print(f"Error: Directory '{directory}' does not exist.")
|
|
sys.exit(1)
|
|
|
|
# Process based on mode
|
|
if mode == "back":
|
|
remove_suffix_back(directory, string)
|
|
elif mode == "front":
|
|
remove_prefix_front(directory, string)
|
|
elif mode == "ext" or mode == "extension":
|
|
remove_from_extension(directory, string)
|
|
else:
|
|
print(f"Error: Unsupported mode '{mode}'. Supported modes: front, back, ext/extension.")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|