How to swap parts of a file name?


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers How to swap parts of a file name?
# 1  
Old 06-19-2010
MySQL How to swap parts of a file name?

I have a number of files that a structured like this:
Quote:
[*] descriptive_file_name.extension
Eg.
[1a34] file_name.ext1
[45xfb] another file name with spaces.ext2
[777] yatf with [text in brackets].ext3
[y4] also a file (plus).ext4

I would like to swap the [*] part with the descriptive_file_name part, so that it looks like this:
Quote:
descriptive_file_name [*].extension
Eg.
file_name [1a34].ext1

I know (or believe) that the two parts need to be assigned to variables that can then be swapped in a mv command, but I'm stuck on how to exactly perform this.
# 2  
Old 06-19-2010
Backup your data first.

Code:
perl -e'
  /([^]]*])\s*(.*)(\..*)$/ and
    rename $_, "$2 $1$3" for glob "*]*";
  '

This User Gave Thanks to radoulov For This Post:
# 3  
Old 06-19-2010
Thanks, that works like a treat!

I understand the part \s*(.*)(\..*)$, but what is happening in the first group in ()s, ,where it says [^]]*] ?

Can you tell me tell me what for glob (is that global?) and what "*]*" is doing?

Thanks
# 4  
Old 06-20-2010
Quote:
Originally Posted by invenio
[...]
but what is happening in the first group in ()s, ,where it says [^]]*] ?
The first group captures the string on the left of the first closing bracket "]", including the bracket itself. It matches any but the "]" character ([^]]), and the following ]. (if the first character inside a character class after the "[" is "^", the class matches any character not in the list).


Quote:
Can you tell me tell me what for glob (is that global?) and what "*]*" is doing?
For is a keyword that denotes a for loop. glob is a Perl function that acts similarly to the shell globbing (file name generation).
The pattern *]* matches file names containing the ] character.
This User Gave Thanks to radoulov For This Post:
# 5  
Old 06-20-2010
Or Shell:
Code:
for i in *]*; do 
  e=${i##*.}
  f=${i%.*}
  mv "$i" "${f#* } ${f%% *}.$e"
done

This User Gave Thanks to Scrutinizer For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Split file into n parts.

Hi all: I have a 5-column tab-separated file. The only thing that I want to do with it is to split it. However, I want to split it with a 80/20 proportion -- randomized, if possible. I know that something like : awk '{print $0 ""> "file" NR}' RS='' input-file will work, but it only... (6 Replies)
Discussion started by: owwow14
6 Replies

2. Shell Programming and Scripting

Incrementing parts of ten digits number by parts

I have number in file which contains date and serial number: 2013101000. The last two digits are serial number (00). So maximum of serial number is 100. After reaching 100 it becomes 00 with incrementing 10 which is day with max 31. after reaching 31 it becomes 00 and increments 10... (31 Replies)
Discussion started by: Natalie
31 Replies

3. Shell Programming and Scripting

Combine two parts of a file

Hello All, I have a file like this APPLY ( 'INSERT INTO brdcst_media_cntnt ( cntnt_id ,brdcst_media_cntnt_cd ,cntnt_prvdr_cd ,data_src_type_cd ,cntnt_titl_nm ,cntnt_desc ,batch_dt ,batch_id ) VALUES ( :cntnt_id (3 Replies)
Discussion started by: nnani
3 Replies

4. Shell Programming and Scripting

Extract Parts of File

Hello All, I have a file like this Define schema flat_file_schema ( a varchar(20) ,b varchar(30) ,c varchar(40) ); (Insert into table ( a ,b ,c ) values ( 1 ,2 ,3 ); (4 Replies)
Discussion started by: nnani
4 Replies

5. UNIX for Dummies Questions & Answers

Help with deleting some parts from text file

Hi all, I have a fat file which contains something like this: ************************************************ blahblahblah blahblahblah Myobject1 HOME ( homecontents01 ( some junk; ) home contents02( some junk; ) ... (7 Replies)
Discussion started by: newboy
7 Replies

6. Shell Programming and Scripting

extract certain parts from a file

I have a logfile from which i need to extract certain pattern based on the time but the problem here is the time is not same for all days. Input file: Mon 12:34:56 abvjingjgg Mon 12:34:57 ofjhjgjhgh . . . Mon 22:30:00 kkfng . . . Mon 23:12:23 kjgsdafhkljf . . . Tue 01:04:54... (8 Replies)
Discussion started by: gpk_newbie
8 Replies

7. HP-UX

Swap device file and swap sapce

Hi I have an integrity machine rx7620 and rx8640 running hp-ux 11.31. I'm planning to fine tune the system: - I would like to know when does the memory swap space spill over to the device swap space? - And how much % of memory swap utilization should be specified (swap space device... (6 Replies)
Discussion started by: lamoul
6 Replies

8. Shell Programming and Scripting

Extracting parts of a file.

Hello, I have a XML file as below and i would like to extract all the lines between <JOB & </JOB> for every such occurance. The number of lines between them is not fixed. Anyways to do this awk? ============ <JOB APR="1" AUG="1" DEC="1" FEB="1" JAN="1" JUL="1" JUN="1" MAR="1" MAY="1"... (3 Replies)
Discussion started by: srivat79
3 Replies

9. Shell Programming and Scripting

getting parts of a file

Hello, I'm trying to retreive certain bits of info from a file. the file contains a list like this info1:info2:info3:info4 info1:info2:info3:info4 info1:info2:info3:info4 info1:info2:info3:info4 how do i pick out only info2 or only info3 without the others? Thanks (11 Replies)
Discussion started by: bebop1111116
11 Replies

10. UNIX for Dummies Questions & Answers

cksum parts of a file

Every time we build an executable the date and time are put into the file, I need to run checksum on just the working lines.(IE, no header files) Is this even possible, if so how would I go about it? I am using a HP-UX server any help you can give me will be greatly appreciated. Thanks (6 Replies)
Discussion started by: crazykelso
6 Replies
Login or Register to Ask a Question