Help with modifying a filename


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with modifying a filename
# 1  
Old 11-01-2014
Help with modifying a filename

Hello,

I have a filename that looks like this:

Code:
ABC_96_20141031_041133.232468

I need to shorten only the "_2014" part of the filename to simply "_14" so the filename looks like:

Code:
ABC_96_141031_041133.232468

I have to do a search for this string because there are hundreds of files and the 96 after the ABC is a sequence number, so some files are like ABC_1_20141031, ABC_10_2014 and ABC_100_2014.

I can rename files and take out or add a prefix and suffix but struggle when it comes to changing anything in the middle. Smilie

How can I accomplish this please?

Last edited by bbbngowc; 11-01-2014 at 07:55 PM..
# 2  
Old 11-01-2014
Code:
ls * | perl -lne 'print "$& $_" if s/(^[A-Z]{3}_\d+_)\d\d(\d\d.*$)/$1$2/'

If you like the result then change the red part to rename the files:
Code:
ls * | perl -lne 'rename $&, $_ if s/(^[A-Z]{3}_\d+_)\d\d(\d\d.*$)/$1$2/'


Last edited by Aia; 11-01-2014 at 08:57 PM.. Reason: Explicit mention to rename
# 3  
Old 11-02-2014
Try this:
Code:
ls *_*_2014*_*.* | while read original
do
 new=$(echo "$original" | awk -F_ 'BEGIN{OFS="_"}{gsub(/^20/,"",$3); print}')
 echo "$original" "$new"
done

or even this, utilizing bash's built-ins:
Code:
ls *_*_2014*_*.* | while read original
do
#disassembling sample file ABC_96_20141031_041133.232468
 piece1=${original##*_} # piece1 now holding 041133.232468
 piece2=${original%_*}  # piece2 now holding ABC_96_20141031
 piece3=${piece2%_*}    # piece3 now holding ABC_96
 piece4=${piece2##*_}   # piece4 now holding 20141031
 piece5=${piece4:2}     # piece5 now holding 141031
#reassembling
 echo "$original" "$piece3"_"$piece5"_"$piece1"
done

In both cases you'll need to substitute echo with mv to perform the actual rename process.
# 4  
Old 11-02-2014
An another solution, with sed


Code:
ls * | while read file
do 
mv $file $(echo $file | sed 's/\(ABC_\)\([0-9]*_\)\(2014\)\(.*\)/\1\214\4/')
done

# 5  
Old 11-02-2014
Wow! Those are some interesting ways. I accomplished it use the following:

Code:
ls -1 XV4_* | awk '{print("mv "$1 " " $1)}' | sed 's/_2014/_14/2' > rename_files.txt

Then made the rename_files.txt executable and ran it. I'm going to have to study up on some of the ways suggested, but the good thing with this site is, should I need this method again, just come look.

Thanks everyone!
# 6  
Old 11-02-2014
That works, but this will be smaller/faster/less consumptive:
Code:
ls -1 XV4_* | awk '{X=$1; sub(/_2014/,"_14",X); print "mv", $1,X}'
or
ls -1 XV4_*| sed  's/\(.*\)/mv \1 \1/;s/_2014/_14/2'

Did you consider to just use (recent) shell builtins
Code:
for FN in ABC_*; do echo mv "$FN" "${FN/_2014/_14}"; done

?
# 7  
Old 11-02-2014
Try:
Code:
for f in *_*_20*_*.*
do
  [ -f "$f" ] && mv -- "$f" "${f%_*_*}_${f#*_*_20}"
done


Last edited by Scrutinizer; 11-02-2014 at 01:36 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[Solved] Modifying/Removing Timestamps from a filename

So given filenames of varying lengths, I was wondering how I would remove or modify appended timestamps of the current date DD-MM-YY. So say: test_DD-MM-YY.txt coolbeans_DD-MM-YY.pdf And what I expect the output to be: test.txt coolbeans.pdf Thanks :) (2 Replies)
Discussion started by: sodaboyz
2 Replies

2. Shell Programming and Scripting

Modifying the .bashrc

I have modified the .bashrc. The problem is that when I write a long command, it does not write on the next line but continues to write on the same line. # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for... (1 Reply)
Discussion started by: kristinu
1 Replies

3. Programming

to extract all the part of the filename before a particular word in the filename

Hi All, Thanks in Advance I am working on a shell script. I need some assistance. My code: if then set "subscriber" "promplan" "mapping" "dedicatedaccount" "faflistSub" "faflistAcc" "accumulator"\ "pam_account"; for i in 1 2 3 4 5 6 7 8;... (0 Replies)
Discussion started by: aealexanderraj
0 Replies

4. UNIX for Dummies Questions & Answers

to extract all the part of the filename before a particular word in the filename

Hi All, Thanks in Advance I am working on a shell script. I need some assistance. My Requirement: 1) There are some set of files in a directory like given below OTP_UFSC_20120530000000_acc.csv OTP_UFSC_20120530000000_faf.csv OTP_UFSC_20120530000000_prom.csv... (0 Replies)
Discussion started by: aealexanderraj
0 Replies

5. Post Here to Contact Site Administrators and Moderators

Modifying old post

If I had posted the organisations server name by overlook and people replied to my post. Later on realising that I had shared some info that should not have been, how can I remove or delete such info from my previous posts? (4 Replies)
Discussion started by: mohtashims
4 Replies

6. Shell Programming and Scripting

modifying a row

I want to modify a file by deleting certain characters. The file looks like this: >ctg86 org=S_bayanus] moltype=genomictg] ctgontig=ctg86] RRRRRRRRRRRRRRRRRRRRRRRRRRRRTTTTTTTTTTTTTTTTTTTTTTTYYYYYYYYYYYYYYYYYYYYFFFFFFFFFFFGGGGGGGGGHHHHH >ctg86 org=S_bayanus] moltype=genomictg] ctgontig=ctg86]... (4 Replies)
Discussion started by: phil_heath
4 Replies

7. Shell Programming and Scripting

Filename from splitting files to have the same filename of the original file with counter value

Hi all, I have a list of xml file. I need to split the files to a different files when see the <ko> tag. The list of filename are B20090908.1100-20090908.1200_CDMA=1,NO=2,SITE=3.xml B20090908.1200-20090908.1300_CDMA=1,NO=2,SITE=3.xml B20090908.1300-20090908.1400_CDMA=1,NO=2,SITE=3.xml ... (3 Replies)
Discussion started by: natalie23
3 Replies

8. Shell Programming and Scripting

rename multiple filename.45267.txt to >> filename.txt

i have several thousand files and in subdirs that are named file.46634.txt budget.75346.pdf etc i want to remove the number but retain the extension. it is always a 5 digit. thanks. (6 Replies)
Discussion started by: jason7
6 Replies

9. Shell Programming and Scripting

gzcat into awk and then change FILENAME and process new FILENAME

I am trying to write a script that prompts users for date and time, then process the gzip file into awk. During the ksh part of the script another file is created and needs to be processed with a different set of pattern matches then I need to combine the two in the end. I'm stuck at the part... (6 Replies)
Discussion started by: timj123
6 Replies

10. UNIX for Dummies Questions & Answers

shortcut for tar cvf - [filename] | gzip > [filename].tar.gz

i'd like to have an alias (or something similar) where i can type a command like "archive" and a filename and have it tar and gzip the file, so... $ archive filename results in filename.tar.gz...do i have to write a script to do this? (4 Replies)
Discussion started by: bcamp1973
4 Replies
Login or Register to Ask a Question