Path Case Script
From ProjectWiki
Revision as of 13:09, 30 November 2009 by 72.147.156.223 (Talk)
Script to change the case of all files and directories under a given path
Contents |
What is this?
Quickie shell script to convert the case of all files within a given path to either uppercase or lowercase. This is often required when moving files between windows and unix style operating systems.
The scripts options are as follows:
usage ./pathChangeCase.sh PATH/TO/CHANGE/CASE [upper|lower] [verbose]
- PATH/TO/CHANGE/CASE - the path you wish to change
- upper|lower - either upper or lower here determines which way the case will be converted (default is upper)
- verbose - if this argument exists will display to terminal what it is moving for verification
Shell Source Code
Copy and paste this to a file, chmod +x filename, and enjoys!
#!/bin/sh path=$1; direction=$2; verbose=$3; if [ "$path" = "" ]; then echo "usage $0 PATH/TO/CHANGE/CASE [upper|lower] [verbose]" echo echo "will change all files in path to either upper or lower case" exit fi if [ -e $path ]; then echo else echo "$path is invalid?!" exit; fi if [ "$direction" = "lower" ]; then translateString="[A-Z] [a-z]" else translateString="[a-z] [A-Z]" fi #make a regexp friendly path repath=`echo $path | sed -e 's/\//\\\\\//g'` echo "Do the directories first, so that the path doesn't change in $path ..." for each in `find $path -type d` do justend=`echo $each | sed s/^$repath//` newname=`echo $justend | tr $translateString` if [ "$justend" != "$newname" ]; then mv $each $path$newname if [ "$verbose" != "" ]; then echo mv $each $path$newname fi fi done echo "Now to the files in $path ..." for eachf in `find $path -type f` do justend=`echo $eachf | sed s/^$repath//` newnamef=`echo $justend | tr $translateString` if [ "$justend" != "$newnamef" ]; then mv $eachf $path$newnamef if [ "$verbose" != "" ]; then echo mv $eachf $path$newnamef fi fi done