83 lines
2 KiB
Bash
Executable file
83 lines
2 KiB
Bash
Executable file
#!/bin/bash
|
|
# This script processes all files in the current folder:
|
|
# 1. Removes leading '-' characters from filenames.
|
|
# 2. Uses the file command to determine the MIME type.
|
|
# 3. Renames the file to add the correct file extension.
|
|
|
|
# Function to map MIME type to a file extension
|
|
get_extension() {
|
|
local mimetype="$1"
|
|
case "$mimetype" in
|
|
image/jpeg)
|
|
echo "jpg"
|
|
;;
|
|
image/png)
|
|
echo "png"
|
|
;;
|
|
image/gif)
|
|
echo "gif"
|
|
;;
|
|
image/webp)
|
|
echo "webp"
|
|
;;
|
|
video/mp4)
|
|
echo "mp4"
|
|
;;
|
|
video/x-matroska)
|
|
echo "mkv"
|
|
;;
|
|
application/pdf)
|
|
echo "pdf"
|
|
;;
|
|
text/plain)
|
|
echo "txt"
|
|
;;
|
|
*)
|
|
echo ""
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Iterate over files in current directory
|
|
for file in *; do
|
|
# Skip if not a regular file
|
|
if [ ! -f "$file" ]; then
|
|
continue
|
|
fi
|
|
|
|
# Remove any leading dashes from the filename
|
|
newname=$(echo "$file" | sed 's/^-*//')
|
|
if [ "$newname" != "$file" ]; then
|
|
if [ -e "$newname" ]; then
|
|
echo "File $newname already exists. Skipping rename of $file."
|
|
file="$newname" # continue processing the original file
|
|
else
|
|
mv -- "$file" "$newname"
|
|
echo "Renamed $file to $newname"
|
|
file="$newname"
|
|
fi
|
|
fi
|
|
|
|
# Determine the MIME type; use '--' to avoid interpreting filenames as options
|
|
mimetype=$(file --mime-type -b -- "$file")
|
|
ext=$(get_extension "$mimetype")
|
|
if [ -z "$ext" ]; then
|
|
echo "Unknown MIME type for $file: $mimetype. Skipping extension addition."
|
|
continue
|
|
fi
|
|
|
|
# If the file doesn't already end with the correct extension, rename it
|
|
if [[ "$file" != *.$ext ]]; then
|
|
newfile="${file}.${ext}"
|
|
# If newfile already exists, avoid overwriting
|
|
if [ -e "$newfile" ]; then
|
|
echo "Target file $newfile already exists. Skipping renaming of $file."
|
|
continue
|
|
fi
|
|
mv -- "$file" "$newfile"
|
|
echo "Renamed $file to $newfile (MIME type: $mimetype)"
|
|
else
|
|
echo "$file already has the correct extension ($ext)"
|
|
fi
|
|
done
|
|
|