Versioning up a file with initials?


Login or Register to Reply

 
Thread Tools Search this Thread
# 1  
Versioning up a file with initials?

I have this code that works great ...

Code:
#!/bin/sh

for file in "$@"
do
        ext=${file##*.}
        base=${file%.*}
        num=${base##*v}
        zeroes=${num%%[!0]*}
        num=${num#$zeroes}      #remove leading zeros, or it uses octal
        num=$((num+1))
        base=${base%v*}
        new=$(printf '%sv%04d.%s' "$base" "$num" "$ext")
        cp -nv "$file" "$new"
done

Now I need it to work with a file that has two characters after the version number.
098_FGT_550_comp_v002gp.nk

I've tried just about everything I know to get this to work but it seems the characters get picked up as part of the number.

Any help is appreciated.

Thank you.
# 2  
You could try adding these intermediate steps after num=${base##*v} to remove trailing characters after the last digit (what you call "initials"):
Code:
initials=${num##*[0-9]}
num=${num%"${initials}"}


Last edited by Scrutinizer; 5 Days Ago at 10:31 PM..
# 3  
That works but I lose the "initials."
The file produced is 098_FGT_550_comp_v0003.nk

Once I get this working, several different people will be using it, so I need it to restore the initials.
# 4  
Not sure where the problem is:
Code:
printf '%sv%04d%s.%s' "$base" "$num" "$initials" "$ext"
 098_FGT_550_comp_v0002gp.nk

Your three digit version number has become four digit with your printf format.


Or, why not (provided you have a recent bash or ksh)



Code:
IFS="v."
ARR=( $file )
echo cp "$file" "$(printf '%sv%04d%s.%s\n' "${ARR[0]}" "$((10#${ARR[1]%%[^0-9]*} + 1))" "${ARR[1]##*[0-9]}" ${ARR[-1]})"
cp 098_FGT_550_comp_v002gp.nk 098_FGT_550_comp_v0003gp.nk


Last edited by RudiC; 5 Days Ago at 04:57 AM..
# 5  
Quote:
Originally Posted by scribling
That works but I lose the "initials."
The file produced is 098_FGT_550_comp_v0003.nk

Once I get this working, several different people will be using it, so I need it to restore the initials.
With the intermediate steps I suggested, the "initials" are saved in the initials variable, so you can use them wherever you please.
So try:
Code:
new=$(printf '%sv%04d%s.%s' "$base" "$num" "$initials" "$ext")

If they need to go somewhere else, then please specify the end result.

Last edited by Scrutinizer; 5 Days Ago at 05:59 AM..
Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
Find a file with common initials and last words
Mohammed_Tabish
Hi, I have a requirement like i have to find out files and remove them on a daily basis. The files are generated as abc_jnfn_201404230004.csv abc_jnfo_201404230004.csv abc_jnfp_201404230004.csv abc_jnfq_201404230004.csv abd_jnfn_201404220004.csv abe_jnfn_201404220004.csv i want to...... UNIX for Dummies Questions & Answers
1
UNIX for Dummies Questions & Answers
Initials of a name
deepwoodsv
I'm stuck, so please tell me how to print the initials of a name (for ex E C for Eric Cartman). If you could suggest a website related to string handling then that would be much appreciated too. Thanks!... Shell Programming and Scripting
3
Shell Programming and Scripting
File Versioning with Shell Script
Brado
Need to add the version date to the moved file if same file name in folder exists and limit the same files in the folder. Ex: If moved or copy file abc.txt to folder XYZ then append the version date abc07112011.txt or abc07122011.txt in the folder. \xyz abc07132011.txt abc07122011.txt...... Shell Programming and Scripting
2
Shell Programming and Scripting
binary versioning
francescoandrio
Dear Members, Do you know any information about versioning a binary file. That means test.out 1.0.0, 1.0.1, 1.1.0, and so on. Can I manually edit version number (both major and minor) and revision number myself (how?) or any utility to set version number (which one?). Best Regards, Francesco... Programming
2
Programming
Solaris versioning
mhm4
Please correct me if I am wrong... Isnt the only difference between minor releases of Solaris, ex. 9/04 and 9/05, is the patche revs between them? If so, why does the /etc/release info stay static when patched?... Solaris
4
Solaris