Sequential numbering from 1 to ten


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sequential numbering from 1 to ten
# 1  
Old 02-24-2014
Sequential numbering from 1 to ten

Hi I am in a bind, I need create a script that will rename files as they come into a folder with sequential numbering at the begining starting at 1 and proceeding to ten then starting at 1 again. Such as 1_filename.pdf, 2_filename.pdf, 3_filename.pdf, 4_filename.pdf, 5_filename.pdf, 6_filename.pdf, 7_filename.pdf, 8_filename.pdf, 9_filename.pdf, 10_filename.pdf it has to continue as long as new files are entering the folder. I was thinking of using a while loop to do this. but its late and my brains are shutting off.
Any help would be much appreciated
# 2  
Old 02-24-2014
How about this:

Code:
#!/bin/bash

max_num() {
   max=0
   for file in [0-9][0-9][0-9]_*
   do
      [ ! -f "$file" ] && return
      num=${file%%_*}
      [ $num -gt $max ] && max=$num
   done
}

cd /path/to/folder
while true
do
    max_num
    for file in *
    do
       [[ ! -f $file || "$file" = [0-9][0-9][0-9]_* ]] && continue
       ((max++))
       printf -v new_name "%03d_%s" $max "$file"
       mv "$file" "$new_name"
    done
    sleep 1
done

---------- Post updated at 12:57 PM ---------- Previous update was at 12:15 PM ----------

Sorry just re-read your requirements and I think this is probably closer to what you asked for:

Code:
#!/bin/bash

mv_down() {
   for ((i=9; i ; i--)) {
       [ -f "${i}_$1" ] && mv -f "${i}_$1" "$((i+1))_$1"
   }
   mv "$1" "1_$1"
}

cd folder
while true
do
    for file in *
    do
       [[ ! -f "$file" || "$file" = [1-9]_* || "$file" = 10_* ]] && continue
       mv_down "$file"
    done
    sleep 1
done


Last edited by Chubler_XL; 02-25-2014 at 12:02 AM.. Reason: Fix interger expression error on empty folder
# 3  
Old 02-25-2014
Thanks very much again for your help, can I ask just one more thing? there is a small error in the script somewhere, it doesn't seem to want to count past 1_?
Thanks you very much again
# 4  
Old 02-25-2014
Are you creating files with the same name?

eg:

Code:
[~]$ ./rename_files.bash &
[1] 8172
[~]$ cd folder
[~/folder]$ echo "Test 1" > paul
[~/folder]$ ls
1_paul
[~/folder]$ echo "Test 2" > paul
[~/folder]$ ls
1_paul  2_paul

# 5  
Old 02-25-2014
Hi, the files actual have there own unique name, the script does work and count from 1 to 10 but only when the files names are identical to start with. Is there away to keep the original base name and still be able to to count from 1 to 10?
Thank very much for all your help
# 6  
Old 02-25-2014
Try this and report back:
Code:
shopt -s extglob                # set bash's extglob option          
TMP=$(ls -t *[0-9]_* |head -1)
CNT=${TMP%%_*}                  # find maximum count till now
ls -tr !([1-9]_* 10_*) |        # apply extended pattern matching
        while read FN           # to exclude already renamed files
          do echo mv $FN $((1+CNT++%10))_$FN    # use modulo function
          done

# 7  
Old 02-25-2014
This version shuffles the existing files down and places new file at #1 (deleting old #10).

Code:
#!/bin/bash

mv_down() {
   rm -f 10_*
   for ((i=9; i ; i--)) {
       printf -v FILE "%s" ${i}_*
       [ -f "$FILE" ] || continue
       BASE=${FILE#${i}_}
       mv -f "$FILE" "$((i+1))_$BASE"
   }
   mv "$1" "1_$1"
}

cd folder
while true
do
    for file in *
    do
       [[ ! -f "$file" || "$file" = [1-9]_* || "$file" = 10_* ]] && continue
       mv_down "$file"
    done
    sleep 1
done


Last edited by Chubler_XL; 02-25-2014 at 03:40 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk use sequential line numbering in output

The awk below produces an output with the original header and only the matching lines (which is good), but the output where the original line numbering in the match found on is used. I can not figure out how to sequentially number the output instead of using the original. I did try to add... (2 Replies)
Discussion started by: cmccabe
2 Replies

2. Shell Programming and Scripting

Incremental numbering?

Would it be possible for a script to duplicate a file and incrementally number it? File in: XXX_007_0580_xxxx_v0016.aep File out: XXX_007_0580_xxxx_v0017.aep If someone knows of a way I'd love to see it. Thanks! (7 Replies)
Discussion started by: scribling
7 Replies

3. Programming

Tool to simulate non-sequential disk I/O (simulate db file sequential read) in C POSIX

Writing a Tool to simulate non-sequential disk I/O (simulate db file sequential read) in C POSIX I have over the years come across the same issue a couple of times, and it normally is that the read speed on SAN is absolutely atrocious when doing non-sequential I/O to the disks. Problem being of... (7 Replies)
Discussion started by: vrghost
7 Replies

4. Shell Programming and Scripting

sequential to line sequential

Hi I have a file sequential way i.e. written in contineous mode and the Record Seperator is AM from which the record is seperated .Now to process I have to make line sequential,and more over record length is not same it varies as per the input address, AM1234563 John Murray 24 Old streeet old... (5 Replies)
Discussion started by: vakharia Mahesh
5 Replies

5. Shell Programming and Scripting

help with numbering a file

Hi, All I need to do is number a file. The file looks like this > JJJJJJJJJJJJJJJJJJJJJ > JKJKJKKKKKKJJJ > MMMMYKKKJKKK what I want to do is number it so that theres a numerical value beside the >. >1 JJJJJJJJJJJJJJJJJJJJJ >2 JKJKJKKKKKKJJJ (2 Replies)
Discussion started by: kylle345
2 Replies

6. UNIX for Advanced & Expert Users

numbering blanks

hello i'm trying to figure out how to number a blank line. For instance this : sed '/./=' file | sed '/./N; s/\n/ /' gives me 1 aaaa 2 bbbbbb 4 cccccc 5 ffkkkfff 6 ffsdfdfs I would like something like this: 1 aaaaa 2 3 bbbbbb 4 5 cccccc And so... (6 Replies)
Discussion started by: wisher115
6 Replies

7. Programming

Reading special characters while converting sequential file to line sequential

We have to convert a sequential file to a 80 char line sequential file (HP UX platform).The sequential file contains special characters. which after conversion of the file to line sequential are getting coverted into "new line" or "tab" and file is getting distorted. Is there any way to read these... (2 Replies)
Discussion started by: Rajeshsu
2 Replies

8. Shell Programming and Scripting

Numbering

I'm trying to do a script that will look for a log file if it is already there change the name to another name. I.E if log.0 is there rename to log.1 rename log.1 to log.2 rename log.2 to log.3 and so on. Only thing is I got no idea where or what is the best command to use for this? ... (3 Replies)
Discussion started by: merlin
3 Replies

9. UNIX for Dummies Questions & Answers

Numbering!

Just a shot question... how to make 1,2,3,...999 into the form of 001,002,003....999 (3 digits) Thanks.... (9 Replies)
Discussion started by: biglemon
9 Replies

10. UNIX for Dummies Questions & Answers

numbering of process

:confused: How does UNIX handle the numbering of processes? (2 Replies)
Discussion started by: tweety111
2 Replies
Login or Register to Ask a Question

Featured Tech Videos