Path Case Script
From ProjectWiki
(Difference between revisions)
(New page: <big>Script to change the case of all files and directories under a given path</big> __TOC__ ==What is this?== Quickie shell script to convert the case of all files within a given path to ...) |
(→What is this?) |
||
Line 12: | Line 12: | ||
* verbose - if this argument exists will display to terminal what it is moving for verification | * verbose - if this argument exists will display to terminal what it is moving for verification | ||
+ | '''Disclaimer!!! I'm not responsible for any mishaps this script may result in! It works for me but please, use with caution.''' | ||
==Shell Source Code== | ==Shell Source Code== |
Revision as of 13:11, 30 November 2009
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
Disclaimer!!! I'm not responsible for any mishaps this script may result in! It works for me but please, use with caution.
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