Copy a file with backslash in the filename


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Copy a file with backslash in the filename
# 1  
Old 03-15-2011
Copy a file with backslash in the filename

Hi,

I'm trying to make a script that copy a file that has a backslash in the filename.

What I'm doing wrong?

The flename is: 1300212744.H786972P30819.ns1.cybernet.com.br,S\=6313:2,

My script
Code:
ParteA="1300212970.H27173P31627.ns1.cybernet.com.br,S"
ParteB=\\
ParteC="="
ParteZ=":2,"
Y=6301

Y=$(( $Y + 1 ))
ARQ1="111300212970.H27173P31627.ns1.cybernet.com.br,S\\=6301:2,"

 ARQ2=$ParteA$ParteB$ParteB$ParteC$Y$ParteZ

 echo " "
 echo "ARQ1: " $ARQ1
 echo "ARQ2: " $ARQ2
 echo "ParteB: " $ParteB

  cp $ARQ1 $ARQ2


Regards and thanks for any help,

Ronaldo

Last edited by Franklin52; 03-16-2011 at 06:26 AM.. Reason: Please use code tags
# 2  
Old 03-15-2011
Your script works fine for me:

Code:
$ ls
111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,
myscript
$ ./myscript
 
ARQ1:  111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,
ARQ2:  1300212970.H27173P31627.ns1.cybernet.com.br,S\\=6302:2,
ParteB:  \
$ ls
111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,
1300212970.H27173P31627.ns1.cybernet.com.br,S\\=6302:2,
myscript

If you dont want double \ in the outfile name take 2nd parteB out (i.e. remove code in red below):
Code:
ARQ2=$ParteA$ParteB$ParteB$ParteC$Y$ParteZ

Also note: these filenames won't work on cygwin as MSDOS uses \ as a directory separator and so disallows this character for filenames. commas and colons also cause issues for some shells - you should consider excaping them too.

Last edited by Chubler_XL; 03-15-2011 at 07:10 PM..
# 3  
Old 03-15-2011
This may depend on the shell...
What kind of shell are you using?

But jeez, what an ugly filename. Don't you want to rename it to something less troublesome? You can always grab it by inode and rename it that way:
Code:
$ ls -i 300212744.H786972P30819.ns1.cybernet.com.br\,S\=6313\:2\, 
9994367 300212744.H786972P30819.ns1.cybernet.com.br,S=6313:2,
$ find . -inum 9994367 -exec mv {} someReasonableName \;
$ ls
someReasonableName

# 4  
Old 03-15-2011
Thanks for your answer,

The filename are generated by the unix, born shell, CentOS, and I need the copy to make jounally file backups.

---------- Post updated at 07:14 PM ---------- Previous update was at 07:10 PM ----------

Chubler,

Thanks for your answer, but if you saw the second ls command, we have two \\ (backslash) instead the one from the original filename.

$ ls
111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,
myscript
$ ./myscript

ARQ1: 111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,
ARQ2: 1300212970.H27173P31627.ns1.cybernet.com.br,S\\=6302:2,
ParteB: \
$ ls
111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,
1300212970.H27173P31627.ns1.cybernet.com.br,S\\=6302:2,
myscript

I need to maintain the filename, changing only the sequence number, that I increment on each copy.

That is my great problem, I can't generate the output filename with only one backslash.

Thanks again,

Ronaldo
# 5  
Old 03-15-2011
OK. I am running bash on CentOS also. It seems to be working fine on my machine. What exactly is your problem? Error message? Does the copying happen with a bad filename or it doesn't copy at all?

One good practice is to use braces when concatenating vars, like:
Code:
ARQ2=${ParteA}${ParteB}${ParteB}

You end up with two backslashes because you have $ParteB twice in that concat. So your ARQ2 has 2 backslashes.

Might be easier to use sed for substitution:

Code:
old=`echo $file | awk -F= '{print $2}' | awk -F: '{print $1}'`
new=$((old+1)); 

newname=`echo file  | sed "s/=$old:/=$new:/"`
cp $file $newname

the '=' and ':' in sed patterns kept so that you don't replace the number in the first part of filename.

Last edited by mirni; 03-15-2011 at 07:26 PM..
# 6  
Old 03-15-2011
Thanks,

But if I use only one backslash, the shell interpret the backslash ans ommit it.

Thats my problem, I can't generate the output filename correct, with only one slash and the number sequence incremented.

Regards,

Ronaldo
# 7  
Old 03-15-2011
Code:
$ ls
111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,  test.sh
$ cat test.sh 
#!/bin/bash


ParteA="1300212970.H27173P31627.ns1.cybernet.com.br,S"
ParteB=\\
ParteC="="
ParteZ=":2,"
Y=6301

Y=$(( $Y + 1 ))
ARQ1="111300212970.H27173P31627.ns1.cybernet.com.br,S\\=6301:2,"

ARQ2=$ParteA$ParteB$ParteC$Y$ParteZ

echo " "
echo "ARQ1: " $ARQ1
echo "ARQ2: " $ARQ2
echo "ParteB: " $ParteB

cp $ARQ1 $ARQ2

$ ./test.sh 
 
ARQ1:  111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,
ARQ2:  1300212970.H27173P31627.ns1.cybernet.com.br,S\=6302:2,
ParteB:  \
$ ls
111300212970.H27173P31627.ns1.cybernet.com.br,S\=6301:2,  test.sh
1300212970.H27173P31627.ns1.cybernet.com.br,S\=6302:2,

Seems to work fine when I took the second $ParteB out...

But what may help is if you quote the vars in cp command:
Code:
cp "$ARQ1" "$ARQ2"

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Sha256 , copy file to new filename

Hello, i want to create a sha256 hash for a file and copy the source file under new filename as : sha256hash_sourcefilename Input : sha256sum FILE Example : sha156sum mounttest.123 Output HASH_FILE How to do this ? e.g.: ... (1 Reply)
Discussion started by: bdittmar
1 Replies

2. UNIX for Beginners Questions & Answers

Copy filepath along with filename at end of another file

Hi , Please help me out for the below problem - I have 2 files in a directory - $ ls -ltr total 4 -rwx------+ 1 abc Domain Users 615 May 31 17:33 abc.txt -rwx------+ 1 abc Domain Users 0 May 31 17:33 ll.sh I want to write the filename of abc.txt along with the directory to the... (2 Replies)
Discussion started by: Pratik4891
2 Replies

3. Shell Programming and Scripting

md5sum on a file with backslash in its name

Hi there, I found something very weird! Should I report that as a bug or is it me misusing the command? I've got a file with a backslash in its name. I know it's a horrible policy but it's not me. The file came from a mac computer because this is a backup server. Anyway, when using... (8 Replies)
Discussion started by: chebarbudo
8 Replies

4. Shell Programming and Scripting

How to copy the filename alone from a directory?

Hi All, As i'm new to this i need help. I want to copy all the filenames in a directory and also it should get arange in the order recent modified. (2 Replies)
Discussion started by: bangarukannan
2 Replies

5. Shell Programming and Scripting

"~" comes in filename after file copy

I have a windows n/w share mapped to a unix path. I am trying to copy the file from one unix location to this location using "cp" command. After I copy the copy and check the filename logging through unix, I can see it as expected. But, when I check the file from Windows at the n/w share, the... (10 Replies)
Discussion started by: khuman
10 Replies

6. Shell Programming and Scripting

How to retain backslash in a line while reading a data file?

Hello Firends I have a file that contains data within single quotes, which has meaning of its own. When I am trying to parse through the file for a different functionality I noticed that I was loosing the backslash when occurrences in the file look like ('\0'). I would want to retain the... (3 Replies)
Discussion started by: easwam
3 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

remove backslash character from file

How do I remove a backslash character \ from a file? I have used sed -e "s|\||g" filename > newfile I have done several permutations on this to no avail such as: sed -e "s|`\`||g" filename > newfile sed -e "s|""\""||g" filename > newfile What am I doing wrong?:confused: ... (2 Replies)
Discussion started by: MissI
2 Replies

9. UNIX for Dummies Questions & Answers

How to copy/move to a file with a special character as the 1st char in the filename?

I am trying to create files with special characters in its filenames for testing purposes. This is on a Linux RHEL4 but this should also be applicable on a Unix shell. I am able to create files with special characters in the filenames...e.g. cp -pv foo.gif \*special.gif cp -pv foo.gif \... (6 Replies)
Discussion started by: sqa777
6 Replies

10. Shell Programming and Scripting

cannot copy file using scp when filename has ":"

hi all , does any one know how can we copy a file using scp which have a file name inlcuding "+:" example : ls -lrt *.csv | tail -3 -rw-r----- 1 opern oper 8479 Feb 15 15:39 LKILA.csv -rw-r----- 1 opern oper 8479 Feb 18 12:06 L+KILA.csv -rw-r----- 1... (4 Replies)
Discussion started by: kiranreddy1215
4 Replies
Login or Register to Ask a Question