Logic for file copy operation

 
Thread Tools Search this Thread
Homework and Emergencies Emergency UNIX and Linux Support Logic for file copy operation
# 1  
Old 11-02-2010
Logic for file copy operation

Hi,
i need to copy contents from source to destination with a few conditions, Please helpme out.
Sample input file
Code:
$>cat testfile.txt
/a/b/c/d | /e/f/g/d

(d can be either a file or directory)
my conditions are:
check if destination is valid and if its a file or directory
if its a directory(i.e source is a new file and does not already exist), copy the source(file) to destination
if its a file(there s a file with the same name as source file), take backup and copy the source(file) to destination
if not both, print error msg
Here is what i have tried:
Code:
 
#!/bin/ksh
src=`cat testfile.txt |awk -F\| '{print $1}' testfile.txt`
dst=`cat testfile.txt |awk -F\| '{print $2}' testfile.txt`
#collect all invalid, or check if source and destination are valid:
if [[ ! -f $src ]];then
      echo "Source does not exist"
      exit 0
fi
if [[ ! -d $dst && -f $dst ]];then
      echo "taking backup of existing $dst and copying new file from $src"
      mv $dst $dst.BAK
      cp $src $dst
elif [[ -d $dst && ! -f $dst ]];then
      echo "copying $src to $dst"
      cp $src $dst
else
      echo "Destination directory does not exist. Please check..."
      exit 0
fi

But this doesnt seem to be working. Please help

Moderator's Comments:
Mod Comment Using code tags is good, indention even better Smilie

Last edited by zaxxon; 11-02-2010 at 07:03 AM..
# 2  
Old 11-02-2010
Code:
src=`cat testfile.txt |awk -F\| '{print $1}' testfile.txt`

is dubious (testfile.txt is provided both as stdin and as a parameter, should be provided once), use instead
Code:
 src=$(awk -F\| '{print $1}' testfile.txt)

# 3  
Old 11-02-2010
sorry... that must have been a typo.... i have just
Code:
 
src=`awk -F\| '{print $1}' testfile.txt`
dst=`awk -F\| '{print $2}' testfile.txt`

# 4  
Old 11-02-2010
Okay, so please elaborate on "this doesnt seem to be working".
# 5  
Old 11-02-2010
Is there only one line in your file testfile.txt, well if that is the case then it will work.

But, if you have more than one line then you need to go for looping [preferrably while loop] and read one line at a time and execute the code you have on it.

Cheers,
Vishal
# 6  
Old 11-02-2010
Quote:
Originally Posted by vishalaswani
Is there only one line in your file testfile.txt, well if that is the case then it will work.
The OP gave a hint about that single line in testfile.txt with this cryptic sample:
Code:
$>cat testfile.txt
/a/b/c/d | /e/f/g/d

It tooks me some time to figure out the silly prompt ...
Login or Register to Ask a Question

Previous Thread | Next Thread

3 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Copy last few lines of a file, perform math operation and iterate further

Hi, I am trying to generate a data of following order: 4 0 1 642 643 4 642 643 1283 1284 4 1283 1284 1924 1925 4 1924 1925 2565 2566 4 2565 2566 3206 3207 4 3206 3207 3847 3848 4 3847 3848 4488 4489 4 4488 4489 5129 5130 ---------------------- 4 1 2 643 644 4 643 644 1284... (6 Replies)
Discussion started by: SaPa
6 Replies

2. UNIX for Dummies Questions & Answers

Copy operation incomplete

I am logged into AIX 6.1 as a root user. I tried copying about 190GB of data to a different folder. cp -R /u01/data/scope /CY/backup I got the message: cp: Requested a write of 4096 bytes, but wrote only 3584. When the copy operation completed, I checked the /CY/backup/scope folder and... (3 Replies)
Discussion started by: shoefiend
3 Replies

3. Shell Programming and Scripting

Column operation : cosne and sine operation

I have a txt file with several columns and i want to peform an operation on two columns and output it to a new txt file . file.txt 900.00000 1 1 1 500.00000 500.00000 100000.000 4 4 1.45257346E-07 899.10834 ... (4 Replies)
Discussion started by: shashi792
4 Replies
Login or Register to Ask a Question