changing filenames in a directory to a number within a loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting changing filenames in a directory to a number within a loop
# 22  
Old 12-13-2007
on the SECOND run, you're mv-ing '1.jpg' to '1.jpg', right?
The system have problems over-writting the same file....
try 'mv -f' - start from the beginning and do 2 runs as you have already.
# 23  
Old 12-13-2007
Quote:
Originally Posted by vgersh99
on the SECOND run, you're mv-ing '1.jpg' to '1.jpg', right?
The system have problems over-writting the same file....
try 'mv -f' - start from the beginning and do 2 runs as you have already.
ya on the second run it's changing the same filename to the same filename. the reason why this is important, is because i will be adding images to the same directory later, and i'd like to just rename the newest photos to be in line with the rest of them. but i don't want to lose any data either. i tried the '-f' flag but it still does the same thing. but after i do it a 3rd and 4th time, it doesn't change anything. it just keeps 10.jpg - 19.jpg. does that help?
# 24  
Old 12-13-2007
well..... here's the same script with the 'echo'.
first run:
Code:
mv Luis Work 001.jpg 1.jpg
mv Luis Work 008.jpg 2.jpg
mv Luis Work 009.jpg 3.jpg
mv Luis Work 010.jpg 4.jpg
mv Luis Work 016.jpg 5.jpg
mv Luis Work 017.jpg 6.jpg
mv Luis Work 018.jpg 7.jpg
mv Luis Work 028.jpg 8.jpg
mv Luis Work 029.jpg 9.jpg
mv Luis Work 030.jpg 10.jpg
mv Luis Work 042.jpg 11.jpg
mv Luis Work 043.jpg 12.jpg
mv Luis Work 044.jpg 13.jpg
mv Luis Work 045.jpg 14.jpg
mv Luis Work 046.jpg 15.jpg
mv Luis Work 055.jpg 16.jpg
mv Luis Work 068.jpg 17.jpg
mv Luis Work 069.jpg 18.jpg
mv Luis Work 070.jpg 19.jpg

here's the second run:
Code:
mv 1.jpg 1.jpg
mv 10.jpg 2.jpg
mv 11.jpg 3.jpg
mv 12.jpg 4.jpg
mv 13.jpg 5.jpg
mv 14.jpg 6.jpg
mv 15.jpg 7.jpg
mv 16.jpg 8.jpg
mv 17.jpg 9.jpg
mv 18.jpg 10.jpg
mv 19.jpg 11.jpg
mv 2.jpg 12.jpg
mv 3.jpg 13.jpg
mv 4.jpg 14.jpg
mv 5.jpg 15.jpg
mv 6.jpg 16.jpg
mv 7.jpg 17.jpg
mv 8.jpg 18.jpg
mv 9.jpg 19.jpg

as you can see some of the files get overwritten..

you can modify sort - to sort numerically this will keep the files - not sure it'll fix all that you want, but.....
Code:
sort -n


Last edited by vgersh99; 12-13-2007 at 02:59 PM.. Reason: added 'sort -n' comment
# 25  
Old 12-13-2007
Code:
ls -1 *.jpg | awk -F"." '{system("mv \""$0"\" "++i"."$NF)}'

# 26  
Old 12-13-2007
reading through this thread its rather obvious why you're encountering the errors.

one of your examples:
kumi@throne:atlas/images/photos % ls
10.jpg 12.jpg 14.jpg 16.jpg 18.jpg 1.jpg 21.jpg 23.jpg 25.jpg 27.jpg 29.jpg 30.jpg 32.jpg 34.jpg 36.jpg 4.jpg 6.jpg 8.jpg gallery*
11.jpg 13.jpg 15.jpg 17.jpg 19.jpg 20.jpg 22.jpg 24.jpg 26.jpg 28.jpg 2.jpg 31.jpg 33.jpg 35.jpg 3.jpg 5.jpg 7.jpg 9.jpg
kumi@throne:atlas/images/photos % ./gallery
mv: overwrite `1.jpg', overriding mode 0644? y

you're original requirement was the take <sometext>.jpg and move it to <somenumber>.jpg using sort, all good and fine.
However it seems from what I see, and what you wrote that you went back and reran the script on this directory again. Earlier someone did note that sort is an ascii sort, not numeric, so the first file the script encounters is 10.jpg ( not 1.jpg) , and this file is already in the format you stated you want.. so why would you want to move it??

then doing a mv -f will move it and sure enough you list files... working as I'd expect.

Unless you're going to run this once on a directory that is not already been converted to <number>.jpg, "and has zero <number>.jpg already existing" you'll need to setup some more logic to:
1. decide if the file is already in the correct format, if so do you want to skip it or not... again note that your ls is a ascii sort, so you're file listing is not really in the order you'd 1st expect.
2. does the filename i.e. <somenumber index>.jpg you're wanted to move the filename to already exist? is so increment index and retest if exists.
# 27  
Old 12-13-2007
@vgersh, of course! that's why i'm losing files, because it's overwriting existing ones before the loop gets to them. and that's where the sort may be able to help. thanks for clearing that up!

@shamrock, your code works perfectly the first time, but like the last script i was working with: if executed a second time, i lose files.

@denn, 'this file is already in the format you stated you want.. so why would you want to move it??', well i'll be adding more photos days later to the gallery, and i'd like to just run the command again, and have the filenames follow the ascending order without disturbing the original (already altered) filenames. and i agree, we're going to need to throw some logic in there, but i would still like to ignore the check to see if the file is already in the correct format, because sometimes, i'll be adding files with intigers in them, but they may be the wrong number. for instance, let's say i have 1.jpg - 10.jpg in a directory. then i add some images like 57.jpg and 1152.jpg. since the filename is an intiger, it's fine, right? no. all of them have to be in ascending order, one behind the other. there can't be any gaps in the integers. so to solve this problem i think all we need is a more intelligent sort and it should work no problem. i'll see what i can do with this.

thank you all for your help and guidance!
# 28  
Old 12-13-2007
alright check it out guys. here's the script:
Code:
#!/bin/bash

ls -a1 *.$1 | sort -n | while IFS= read fname ; do
    #echo "mv $fname ${i}.${1}"
    mv -f "$fname" "${i}.${1}"
    ((i++))
done

and here's the outcome:
Code:
kumi@throne:atlas/images/photos % ls
gallery*           Luis Work 009.jpg  Luis Work 017.jpg  Luis Work 029.jpg  Luis Work 043.jpg  Luis Work 046.jpg  Luis Work 069.jpg
Luis Work 001.jpg  Luis Work 010.jpg  Luis Work 018.jpg  Luis Work 030.jpg  Luis Work 044.jpg  Luis Work 055.jpg  Luis Work 070.jpg
Luis Work 008.jpg  Luis Work 016.jpg  Luis Work 028.jpg  Luis Work 042.jpg  Luis Work 045.jpg  Luis Work 068.jpg  untitled folder/
kumi@throne:atlas/images/photos % ./gallery 
ls: *.: No such file or directory
kumi@throne:atlas/images/photos % ./gallery jpg
kumi@throne:atlas/images/photos % ls
10.jpg  12.jpg  14.jpg  16.jpg  18.jpg  2.jpg  4.jpg  6.jpg  8.jpg  gallery*
11.jpg  13.jpg  15.jpg  17.jpg  1.jpg   3.jpg  5.jpg  7.jpg  9.jpg  untitled folder/
kumi@throne:atlas/images/photos % ./gallery jpg
kumi@throne:atlas/images/photos % ls
10.jpg  11.jpg  12.jpg  13.jpg  14.jpg  15.jpg  16.jpg  17.jpg  1.jpg  2.jpg  3.jpg  4.jpg  5.jpg  6.jpg  7.jpg  8.jpg  9.jpg  gallery*  untitled folder/

i think we're close! i lost one image and it was on the first run. i didn't lose anything the second time, but the files were listed in a different fashion, which i thought was weird. anyway what do you guys see?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

For/While Loop to Increment Filenames in a Script

Daily stupid question. I want to increment the file name everytime the script is run. So for example if the filename is manager.log and I run the script, I want the next sequence to be manager.log1. So to be clear I only want it to increment when the script is executed. So ./script... (10 Replies)
Discussion started by: metallica1973
10 Replies

2. UNIX for Dummies Questions & Answers

[Solved] Writing a loop to changing the names of files in a directory

Hi, I would like to write a loop to change the names of files in a directory. The files are called data1.txt through data1000.txt. I'd like to change their names to a1.txt through a1000.txt. How do I go about doing that? Thanks! (2 Replies)
Discussion started by: evelibertine
2 Replies

3. Shell Programming and Scripting

Generate filenames in a loop

Hi all, I want to generate output files in a loop, run the same command on the same input file 1000 times and output in files with a new name each time, maybe a number appended to it. The output will be different each time as I`m sampling randomly from the input file. I want to do the... (3 Replies)
Discussion started by: newbie83
3 Replies

4. UNIX and Linux Applications

Firefox changing hidden filenames

Is firefox changing the filename of this hidden file for anyone else? I tried in firefox 3, 4, and 6. They all got changed when I tried when I downloaded the file. Firefox removed the leading dot that makes the file be hidden. MEGAUPLOAD - The leading online storage and file delivery service (2 Replies)
Discussion started by: cokedude
2 Replies

5. Shell Programming and Scripting

changing number in bash (number is in form of string)

I have a txt file as database. when i run my program what it does is it ask me for 3 name and stored in the file as name1:name2:name3:1 when u enter 3 name it add those in file as above format and add 1 at the end. I what i want is if i enter same names again it changes that 1 to 2 and so... (3 Replies)
Discussion started by: Learnerabc
3 Replies

6. Shell Programming and Scripting

Whitespace in filenames in for loop in bash script

I'm trying to search all .odt files in a directory for a string in the text of the file. I've found a bash script that works, except that it can't handle whitespace in the filenames. #!/bin/bash if ; then echo "Usage: searchodt searchterm" exit 1 fi for file in $(ls *.odt); do ... (4 Replies)
Discussion started by: triplemaya
4 Replies

7. Shell Programming and Scripting

loop through numbered filenames

Hi I'm very new to this script thing, so please be gentle. I am trying to get a command - the mach2qtl command in the code below - to loop through a set of files. Each command should take the same two .dat and .ped files, but the .mlinfo and .mlprob files with filenames including 'chrom1' ... (7 Replies)
Discussion started by: polly_falconer
7 Replies

8. Shell Programming and Scripting

Help with how to account for changing filenames

The files below are essentially “lookup files” used in a series of scripts that run through the look up files and grab the correct Group Name and File Type and then unless I have the file name specified will replace the variable with the corresponding group name when processing the files before... (1 Reply)
Discussion started by: defiant82
1 Replies

9. UNIX for Dummies Questions & Answers

extracting and using date from filenames in a loop

HIya, Having a dumb day whilst writing an archive process in Shell want to extract from the filename the date and archive into tar files based on this, I don't want to use mtime as it may not be the actual file date. The files are -rw-rw---- 1 user admin 100 Aug 29 11:10... (2 Replies)
Discussion started by: badg3r
2 Replies

10. UNIX for Dummies Questions & Answers

Appending text to a number of similar filenames

Hi, I was wondering if there was a way to append something to filenames based on a wildcard. For example, if I have the following files in a directory: blah1 blah2 blah3 blah4 blah5 I want to rename these all to: blah1.txt blah2.txt blah3.txt blah4.txt blah5.txt Is there a... (4 Replies)
Discussion started by: Djaunl
4 Replies
Login or Register to Ask a Question