it-artikel:linux:shellscript-automatically-fix-wrong-filename-extensions-fix-filename-extension.sh
Differences
This shows you the differences between two versions of the page.
— | it-artikel:linux:shellscript-automatically-fix-wrong-filename-extensions-fix-filename-extension.sh [2022-08-31 12:30] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== shellscript - automatically fix wrong filename extensions - fix-filename-extension.sh ====== | ||
+ | Its a little weird topic. But when you have to deal a lot with "non IT people" | ||
+ | |||
+ | The shell script is nowhere near complete or comprehensive yet. But its a possible start and building block and might be a help for someone else too. | ||
+ | |||
+ | :!: **Since this script actually modifies files in a filesystem recursively, | ||
+ | |||
+ | <file bash fix-filename-extension.sh> | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | # fix filename extension script Version 2018-12-08 | ||
+ | # in current directory (recursively) | ||
+ | # | ||
+ | # by Axel Werner | ||
+ | # | ||
+ | # | ||
+ | # CHANGE HISTORY: | ||
+ | # ========================= | ||
+ | # | ||
+ | # 2018-12-08 | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | #TODO: | ||
+ | # - xxxx | ||
+ | # | ||
+ | |||
+ | |||
+ | set -e | ||
+ | #set -x | ||
+ | |||
+ | |||
+ | # define some colors for console output | ||
+ | |||
+ | RED=' | ||
+ | YELLOW=' | ||
+ | GREEN=' | ||
+ | BLUE=' | ||
+ | NOCOLOR=' | ||
+ | NC=$NOCOLOR | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | function print { | ||
+ | echo -e " | ||
+ | } | ||
+ | |||
+ | function printInfo { | ||
+ | echo -e " | ||
+ | } | ||
+ | |||
+ | function printWarning { | ||
+ | echo -e " | ||
+ | } | ||
+ | |||
+ | function printError { | ||
+ | echo -e " | ||
+ | } | ||
+ | |||
+ | function printDebug { | ||
+ | echo -e " | ||
+ | } | ||
+ | |||
+ | function reportCaseDetected { | ||
+ | printDebug " | ||
+ | } | ||
+ | |||
+ | function toUpper { | ||
+ | echo " | ||
+ | } | ||
+ | |||
+ | function toLower { | ||
+ | echo " | ||
+ | } | ||
+ | |||
+ | function noSpaces { | ||
+ | echo " | ||
+ | } | ||
+ | |||
+ | function testFileExtention { | ||
+ | fileExtensionIsUppercase=$( toUpper " | ||
+ | newFileExtensionUpper=$( toUpper " | ||
+ | |||
+ | if [ " | ||
+ | printDebug " | ||
+ | return 0 | ||
+ | else | ||
+ | printWarning " | ||
+ | return -1 | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | find . -type f -print0 | while read -d $' | ||
+ | fileNameWithPath=" | ||
+ | print " | ||
+ | fileTypeDescription=$(file " | ||
+ | printDebug " | ||
+ | fileExtensionIs=" | ||
+ | fileBaseNameNoExt=" | ||
+ | printDebug " | ||
+ | printDebug " | ||
+ | |||
+ | fileTypeDescCompressed=$( toUpper $( noSpaces " | ||
+ | | ||
+ | case $fileTypeDescCompressed in | ||
+ | ( PNGIMAGEDATA* ) | ||
+ | newFileExtension=png | ||
+ | reportCaseDetected | ||
+ | if ! testFileExtention ; then | ||
+ | mv -v " | ||
+ | fi | ||
+ | ;; | ||
+ | ( JPEGIMAGEDATA* ) | ||
+ | newFileExtension=jpg | ||
+ | reportCaseDetected | ||
+ | if ! testFileExtention ; then | ||
+ | # test for special case when extension has an alternative name. | ||
+ | if [ $( toUpper $fileExtensionIs ) = $( toUpper " | ||
+ | print " | ||
+ | else | ||
+ | mv -v " | ||
+ | fi | ||
+ | fi | ||
+ | ;; | ||
+ | ( *AVI*VIDEO ) | ||
+ | newFileExtension=avi | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( ISOMEDIA*MP4V2* | ISOMEDIA*M4V*VIDEO | ISOMEDIA*MP4* ) | ||
+ | newFileExtension=mp4 | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( *ISOMEDIA*3GPP* ) | ||
+ | newFileExtension=3gp | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( *RARARCHIVEDATA* | 7-ZIPARCHIVEDATA* ) | ||
+ | newFileExtension=' | ||
+ | reportCaseDetected | ||
+ | # we dont temper with archive files just yet. | ||
+ | ;; | ||
+ | ( *MATROSKADATA* ) | ||
+ | newFileExtension=mkv | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( SENDMAIL* | DATA ) | ||
+ | newFileExtension=' | ||
+ | reportCaseDetected | ||
+ | # we dont temper with misc data files just yet. | ||
+ | ;; | ||
+ | ( MICROSOFTASF ) | ||
+ | newFileExtension=wmv | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( MPEGSEQUENCE, | ||
+ | newFileExtension=mpg | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( MACROMEDIAFLASHVIDEO ) | ||
+ | newFileExtension=flv | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( DOSEXECUTABLE* ) | ||
+ | newFileExtension=' | ||
+ | reportCaseDetected | ||
+ | # we dont temper with that files just yet. | ||
+ | ;; | ||
+ | ( WEBM ) | ||
+ | newFileExtension=webm | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( BOURNE-AGAINSHELLSCRIPT* ) | ||
+ | newFileExtension=' | ||
+ | reportCaseDetected | ||
+ | # we dont temper with shell script files just yet. | ||
+ | ;; | ||
+ | ( ASCIITEXT ) | ||
+ | newFileExtension=' | ||
+ | reportCaseDetected | ||
+ | # we dont temper with ASCII files just yet. | ||
+ | ;; | ||
+ | ( *STRING* ) | ||
+ | newFileExtension=EXTENSION | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( *STRING* ) | ||
+ | newFileExtension=EXTENSION | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( *STRING* ) | ||
+ | newFileExtension=EXTENSION | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( *STRING* ) | ||
+ | newFileExtension=EXTENSION | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( *STRING* ) | ||
+ | newFileExtension=EXTENSION | ||
+ | reportCaseDetected | ||
+ | # we dont temper with video files just yet. | ||
+ | ;; | ||
+ | ( * ) | ||
+ | printError " | ||
+ | exit -1 | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | | ||
+ | </ | ||
+ | |||
+ | --- // | ||
+ | |||
+ | |||
+ | {{tag> |