View difference between Paste ID: JxFJAdnM and CH0LyQcU
SHOW: | | - or go back to the newest paste.
1
#!/bin/bash
2
## 
3
## "LowerIt"
4
## 
5-
## Original code found here:  http://www.linuxjournal.com/content/convert-filenames-lowercase
5+
## Original code found here:  http://www.linuxjournal.com/content/convert-filenames-lowercase ;  though this looks nothing like it.  
6
## Modified by Maiya78 to change directory names, to work recursively, and to support unicode filenames on GNU systems.  I also copyedited the comments.  :3 
7
## 
8
## From the current directory, recursively convert to lower case all file and directory names
9
## Should ask for verification before overwriting an existing file.  
10
## 
11
## ------------------------------------------------------------------------------------------------------------
12
13-
unset pwd && unset export && unset cd && unset echo && unset ls && unset sd && unset mv
13+
14
unset pwd && unset export && unset cd && unset echo && unset sed && unset mv
15-
export strDir=$(pwd)
15+
16-
cd $strDir
16+
export strStartDir=$(pwd)
17-
echo "Entering current directory:  "$strDir
17+
cd $strStartDir
18-
## Need to make a loop or something here that repeats this for every subdirectory ad nauseum
18+
19
## Write in a function the loop that we'll use for to edit the files
20-
## Show the user what's in the current directory pre-edit
20+
function editingloop {
21-
echo "
21+
    if [[ -d $strDir ]]; then
22-
Current directory before edit:  " && ls -a
22+
        cd $strDir
23-
## Start the editing loop
23+
        ## Check to make sure current directory isn't empty
24-
for strItem in $(ls -a)
24+
#        if [[ $(echo $strDir/*) != $(echo $strDir'/*') ]]; then  ## Doesn't seem to be working.  :\ 
25-
do
25+
            echo "
26-
## Save the computer some breath on . and ..
26+
_______________________________________________________________________
27-
#    if [[ $strItem != '.' || '..' ]]; then
27+
Entering current directory:  "$strDir
28-
#        continue
28+
            echo ''
29-
#    fi
29+
            echo "Current directory before edit:  " && echo $strDir/* | sed 's/ /\n/g' | sed 's!.*/!!' | tr '\r\n' ' '
30-
## Set a variable equal to the lowercased vesion of the original filename
30+
            ## Start the editing loop
31-
    strLowerCasedItem=$(echo $strItem | sed 's/[[:upper:]]*/\L&/')
31+
            for strItem in $(ls -a); do
32-
## If this variable is the same as the original, then the original was already lowercased, so we skip it.  
32+
                ## Save the computer some breath on . and ..
33-
    if [[ $strLowerCasedItem != $strItem ]]; then
33+
#                if [[ $strItem != '.' || '..' ]]; then  ## Doesn't seem to be working.  :\ 
34-
        mv -i $(echo $strDir'/'$strItem) $(echo $strDir'/'$strLowerCasedItem)
34+
                    ## Set a variable equal to the lowercased vesion of the original filename
35
                    strLowerCasedItem=$(echo $strItem | sed 's/[[:upper:]]*/\L&/')
36
                    ## If this variable is the same as the original, then the original was already lowercased, so we skip it.  
37-
## Show the user what's in the current directory post-edit
37+
                    if [[ $strLowerCasedItem != $strItem ]]; then
38-
echo "
38+
                        mv -i $(echo $strDir'/'$strItem) $(echo $strDir'/'$strLowerCasedItem)  ## '-i' makes sure that we check the user before clobbering
39-
Current directory after edit:  " && ls -a
39+
                    fi
40
#                fi
41
            done
42
            echo '
43
'
44
            echo "Current directory after edit:  " && echo $strDir/* | sed 's/ /\n/g' | sed 's!.*/!!' | tr '\r\n' ' '
45
            echo ''
46
#        fi
47
    fi
48
}
49
50
## Lowercase all items in the starting directory
51
editingloop
52
53
## This loops the main loop through each subdirectory of the starting directory
54
for strDir in $(echo $strStartDir/*); do
55
editingloop
56
done
57
58
exit 0