There are several ways to achieve this, but i ’ll explain two of the most efficient and reliable methods. For the purpose of this guide, we have used a directory named Files
which has the following structure:
# find Files -depth
![List Directory Structure](https://www.tecmint.com/wp-content/uploads/2017/09/List-Directory-Structure.png)
List Directory Structure
1. Using find, xargs and rename Commands Together
rename is a simple command line utility for renaming several files at once in Linux. You can use it together with find utility to rename all files or subdirectories in a particular directory to lowercase as follows:
$ find Files -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;
-depth
– lists each directory’s contents before the directory itself.-n 1
– instructs xargs to use at most one argument per command line from find output.
Sample output after renaming files and subdirectories to lowercase in Files
directory.
![Rename Files and Directory Names to Lowercase](https://www.tecmint.com/wp-content/uploads/2017/09/Rename-Files-and-Directory-Names-to-Lowercase.png)
Rename Files and Directory Names to Lowercase
Another alternative way using the find and mv commands in a script as explained below.
2. Using find and mv Commands in Shell Script
First create your script (you can name it anything you prefer):
$ cd ~/bin $ vi rename-files.sh
Then add the code below in it.
#!/bin/bash #print usage if [ -z $1 ];then echo "Usage :$(basename $0) parent-directory" exit 1 fi #process all subdirectories and files in parent directory all="$(find $1 -depth)" for name in ${all}; do #set new name in lower case for files and directories new_name="$(dirname "${name}")/$(basename "${name}" | tr '[A-Z]' '[a-z]')" #check if new name already exists if [ "${name}" != "${new_name}" ]; then [ ! -e "${new_name}" ] && mv -T "${name}" "${new_name}"; echo "${name} was renamed to ${new_name}" || echo "${name} wasn't renamed!" fi done echo echo #list directories and file new names in lowercase echo "Directories and files with new names in lowercase letters" find $(echo $1 | tr 'A-Z' 'a-z') -depth exit 0
Save and close the file, then make the script executable and run it:
$ chmod +x rename-files.sh $ rename-files.sh Files #Specify Directory Name
![Lowercase File Names Using Script](https://www.tecmint.com/wp-content/uploads/2017/09/Lowercase-File-and-Directories-using-Script.png)
Lowercase File Names Using Script
You may also like to read these following related articles.ah