Creating a bash script to change file names to lower case -



Creating a bash script to change file names to lower case -

i trying write bash script convert file names lowercase, have problem because not work 1 case.

when have file1 , file1, , utilize on file1 replace letters file1.

#!/bin/bash testfile="" flag="1" file in * testfile=`echo file | tr '[a-z]' '[a-z]'` file2 in * if [ `echo $testfile` = `echo $file2` ] flag="0" fi done if [ $flag = "1" ] mv $file `echo $file | tr '[a-z]' '[a-z]'` fi flag="1" done

looks

testfile=`echo file | tr '[a-z]' '[a-z]'`

should

testfile=`echo "$file" | tr '[a-z]' '[a-z]'`

re-writing script prepare other minor things

#!/bin/bash testfile= flag=1 file in *; testfile=$(tr '[a-z]' '[a-z]' <<< "$file") file2 in *; if [ "$testfile" = "$file2" ]; flag=0 fi done if [ $flag -eq 1 ]; mv -- "$file" "$(tr '[a-z]' '[a-z]' <<< "$file")" fi flag=1 done quote variables prevent word-splitting ("$file" instead of $file) generally preferable utilize $() instead of tildes don't utilize string comparing don't have to use -- delimit arguments in commands take (in order prevent files -file beingness treated options) by convention, should utilize capital variable names environment variables, though kept them in above. pipes vs here strings (<<<) doesn't matter much here, <<< faster , safer.

though more simply, think want

#!/bin/bash file in *; testfile=$(tr '[a-z]' '[a-z]' <<< "$file") [ -e "$testfile" ] || mv -- "$file" "$testfile" done

or on modern mv implementations (not technically posix)

#!/bin/bash file in *; mv -n -- "$file" "$(tr '[a-z]' '[a-z]' <<< "$file")" done

from man page

-n, --no-clobber not overwrite existing file

bash

Comments

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -