Rename all ".JPG" files to ".jpg" under all subfolders...


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Rename all ".JPG" files to ".jpg" under all subfolders...
# 8  
Old 04-26-2010
Quote:
Originally Posted by masta
Some shell parameter substitution might help.

Code:
 blar=foo.JPG
 echo ${blar/JPG/jpg}

will output:
Code:
foo.jpg

So that means you can do:

Code:
for JPG in `find /path -type f -name \*.JPG` ; do mv $JPG ${JPG/JPG/jpg} ; done

No need for a separate script.
There is if you care about handling filenames that have any IFS characters. Assuming that IFS has its default value, your code will choke on any filename that contains a space, tab, or newline.

Also, there is no way to fix that shortcoming. If you double-quote the command substitution in the for loop's list, it will always result in a list with a single item.

The shell substitution that the original poster's code uses works correctly and is part of the posix standard. Your subsitution is an extension and will mishandle filenames with an embedded ".JPG" sequence (though such a filename may be unlikely, the limitation should be mentioned).
Code:
$ f=image.JPG.JPG
$ echo ${f/JPG/jpg}
image.jpg.JPG

Regards,
Alister

---------- Post updated at 02:38 AM ---------- Previous update was at 02:34 AM ----------

Quote:
Originally Posted by thegeek
you can even use a simple rename command as
Code:
find -name '*.JPG' -exec rename .JPG .jpg {} \;

That's a very nice approach, but alas rename is not a standardized utility and may not be present. If it is, your approach is most convenient.

By the way, you could speed it up by not having to invoke rename once per filename, using:
Code:
find -name '*.JPG' -exec rename .JPG .jpg {} +

Also, I get the impression, from reading the man page, that your solution may incorrectly rename files that contain an embedded .JPG before the end of the filename. It may be an uncommon scenario, but still, for completeness' sake, I mention it.

Regards,
Alister

Last edited by alister; 04-26-2010 at 04:34 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. Shell Programming and Scripting

Delete all log files older than 10 day and whose first string of the first line is "MSH" or "<?xml"

Dear Ladies & Gents, I have a requirement to delete all the log files in /var/log/test directory that are older than 10 days and their first line begin with "MSH" or "<?xml" or "FHS". I've put together the following BASH script, but it's erroring out: for filename in $(find /var/log/test... (2 Replies)
Discussion started by: Hiroshi
2 Replies

4. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

5. Solaris

The slices "usr", "opt", "tmp" disappeared!!! Help please.

The system don't boot. on the screen appears following: press enter to maintenance (or type CTRL-D to continue)...I checked with format command. ... the slices "0-root","1-swap","2-backup" exist. ...the slises "3-var","6-usr" -unassigned. :( (16 Replies)
Discussion started by: wolfgang
16 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. Shell Programming and Scripting

"Join" or "Merge" more than 2 files into single output based on common key (column)

Hi All, I have working (Perl) code to combine 2 input files into a single output file using the join function that works to a point, but has the following limitations: 1. I am restrained to 2 input files only. 2. Only the "matched" fields are written out to the "matched" output file and... (1 Reply)
Discussion started by: Katabatic
1 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question