Picking up last two specific files, for transfer


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Picking up last two specific files, for transfer
# 8  
Old 06-26-2018
Please show us your complete script as it currently stands.

It looks like you have confused ftp into thinking that a vertical bar character (|) should be used as a filename instead of as a separator in a shell pipeline.
# 9  
Old 06-26-2018
Whoooops! I think there is a mistake in my suggestion. The expression to match the filenames should be wrapped in double quotes, " and somehow I've lost the beginning out. Try this amended version with the addition in red:-
Code:
#!/bin/sh

# Determine files first
D_file=$(ls -1 "*Deposit_*"    | tail -1)
W_file=$(ls -1 "*Withdrawal_*" | tail -1)

# Call the FTP
HOST=192.168.6.25
USER=rico
PASSWD=123xyz
/usr/bin/ftp -inv $HOST <<EOF
user $USER $PASSWD
binary
cd /home/scripts/Live deposits/input
put "$D_file"
cd /home/script/Live withdrawal/input
put "$W_file"
bye
EOF


Apologies,
Robin
# 10  
Old 06-26-2018
Quote:
Originally Posted by rbatte1
Whoooops! I think there is a mistake in my suggestion. The expression to match the filenames should be wrapped in double quotes, " and somehow I've lost the beginning out. Try this amended version with the addition in red:-
Code:
#!/bin/sh

# Determine files first
D_file=$(ls -1 "*Deposit_*"    | tail -1)
W_file=$(ls -1 "*Withdrawal_*" | tail -1)

# Call the FTP
HOST=192.168.6.25
USER=rico
PASSWD=123xyz
/usr/bin/ftp -inv $HOST <<EOF
user $USER $PASSWD
binary
cd /home/scripts/Live deposits/input
put "$D_file"
cd /home/script/Live withdrawal/input
put "$W_file"
bye
EOF

Apologies,
Robin
Robin,
I think you need to loose the double-quote to allow shell to do name expansion.
# 11  
Old 06-26-2018
Hi Robbin,
vgersh99 is correct in noting that quoted asterisks, question marks, etc. are matched by the shell as literal strings. To use asterisks to match any string of characters in a pathname and to use a question mark to match any single character in a pathname in pathname pattern expansions, the asterisks and question marks cannot be quoted.

Since there are no IFS characters in either Deposit_ or Withdrawal_, no quotes are required. But, any of the following would work:
Code:
D_file=$(ls -1 *"Deposit_"*    | tail -1)
W_file=$(ls -1 *"Withdrawal_"* | tail -1)

D_file=$(ls -1 *'Deposit_'*    | tail -1)
W_file=$(ls -1 *'Withdrawal_'* | tail -1)

D_file=$(ls -1 *Deposit_*    | tail -1)
W_file=$(ls -1 *Withdrawal_* | tail -1)

unless the pathnames roll over from Deposit_999 to Deposit_1000 and Withdrawal_999 to Withdrawal_1000.

Hi fretagi,
If you are trying to find the last two files based on most recent modification timestamp instead of by alphanumeric filename sort order consider trying one of the following instead:
Code:
D_file=$(ls -1rt *Deposit_*    | tail -1)
W_file=$(ls -1rt *Withdrawal_* | tail -1)

D_file=$(ls -1t *Deposit_*    | head -1)
W_file=$(ls -1t *Withdrawal_* | head -1)

Either of these will work even when the number of digits increases in the matched filenames.
# 12  
Old 06-27-2018
Hi Don!

I tried the code outside the script just like this:
Code:
ls -1rt *Deposit_*    | tail -1
Deposit_699.checksum

and
Code:
ls -1rt *Withdrawal_* | tail -1
Withdrawal_700.checksum

It should not pick the .checksum extension files only the .csv files.

---------- Post updated at 07:32 AM ---------- Previous update was at 07:13 AM ----------

Hi

my original script was:
Code:
#!/bin/sh
HOST=192.168.6.25
USER=rico
PASSWD=123xyz
/usr/bin/ftp -inv <<EOF
open $HOST
user $USER $PASSWD
binary
cd /home/scripts/Live deposits/input
put *Deposit_* | tail -1
cd /home/script/Live withdrawal/input
put *Withdrawal_* | tail -1
bye
EOF

which gave the following output
Code:
-rw-r--r--   1 fundamo  fundamo     3723 Jan  1 00:00 Withdrawal_625.csv

which is wrong because the file I want is last Withdrawal_700.csv

Now using the code suggested by a forum member:
Code:
#!/bin/sh

# Determine files first
D_file=$(ls -1 *Deposit_* | tail -1)
W_file=$(ls -1 *Withdrawal_* | tail -1)

# Call the FTP
HOST=192.168.6.25
USER=rico
PASSWD=123xyz
/usr/bin/ftp -inv $HOST <<EOF
user $USER $PASSWD
binary
cd /home/scripts/Live deposits/input
put "$D_file"
cd /home/script/Live withdrawal/input
put "$W_file"
bye
EOF

It gives me the following results:

Code:
./teste.sh: syntax error at line 4: `D_file=$' unexpected

# 13  
Old 06-27-2018
Quote:
Originally Posted by fretagi
Hi Don!

I tried the code outside the script just like this:
Code:
ls -1rt *Deposit_*    | tail -1
Deposit_699.checksum

and
Code:
ls -1rt *Withdrawal_* | tail -1
Withdrawal_700.checksum

It should not pick the .checksum extension files only the .csv files.
So filter for csv files:
Code:
ls -1t *Deposit_*.csv | head -1
ls -1t *Withdrawal_*.csv | head -1

and personally I'm in favour of using head over tail (imagine your directory has 300 files in it ...)
Quote:

Hi

Now using the code suggested by a forum member:
Code:
#!/bin/sh

# Determine files first
D_file=$(ls -1 *Deposit_* | tail -1)
W_file=$(ls -1 *Withdrawal_* | tail -1)

# Call the FTP
HOST=192.168.6.25
USER=rico
PASSWD=123xyz
/usr/bin/ftp -inv $HOST <<EOF
user $USER $PASSWD
binary
cd /home/scripts/Live deposits/input
put "$D_file"
cd /home/script/Live withdrawal/input
put "$W_file"
bye
EOF

It gives me the following results:

Code:
./teste.sh: syntax error at line 4: `D_file=$' unexpected

Your version of /bin/sh does not recognise the more modern process substitution syntax:
Code:
D_file=$(ls -1 *Deposit_* | tail -1)

You could either modify the "shebang" line at the top of your script to use ksh if you have it, or bash, or alternatively use the older process substitution syntax using backticks:
Code:
D_file=`ls -1 *Deposit_* | tail -1`

Andrew
These 2 Users Gave Thanks to apmcd47 For This Post:
# 14  
Old 06-27-2018
Replacing D_file=$(ls -1 *Deposit_* | tail -1) with D_file=`ls -1 *Deposit_* | tail -1` worked fine

---------- Post updated at 11:59 AM ---------- Previous update was at 11:32 AM ----------

there is a need to also include the Deposit_699.checksum and Withdrawal_700.checksum. I did include in the script like this:
Code:
D_file=`ls -1 *Deposit_* | tail -1`
Dd_file=`ls -1 *Deposit_*.checksum | tail -1`
W_file=`ls -1 *Withdrawal_* | tail -1`
Ww_file=`ls -1 *Withdrawal_*.checksum | tail -1`

but this did not work out..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Picking up files conditionally

Hi I have a scenario: I have a directory say DIR1 (no sub directories) and have few files in that directory as given below: app-cnd-imp-20150820.txt app-cxyzm-imp-20150820.txt app-petco-imp-20150820.txt app-mobility-imp-20150820.txt app-mobility-imp-20150821.txt... (7 Replies)
Discussion started by: Saanvi1
7 Replies

2. Linux

How to transfer files...

Hi guys, ok so, how do you go about networking between Windows and Linux so that I can transfer files between each other? (5 Replies)
Discussion started by: billcrosby
5 Replies

3. UNIX for Dummies Questions & Answers

Sorting files based on timestamp and picking the latest file

Hi Friends, Newbie to shell scripting Currently i have used the below to sort data based on filenames and datestamp $ printf '%s\n' *.dat* | sort -t. -k3,4 filename_1.dat.20120430.Z filename_2.dat.20120430.Z filename_3.dat.20120430.Z filename_1.dat.20120501.Z filename_2.dat.20120501.Z... (12 Replies)
Discussion started by: robertbrown624
12 Replies

4. Shell Programming and Scripting

Urgent ...pls Sorting files based on timestamp and picking the latest file

Hi Friends, Newbie to shell scripting. Currently i have used the below to sort data based on filenames and datestamp $ printf '%s\n' *.dat* | sort -t. -k3,4 filename_1.dat.20120430.Z filename_2.dat.20120430.Z filename_3.dat.20120430.Z filename_1.dat.20120501.Z filename_2.dat.20120501.Z... (1 Reply)
Discussion started by: robertbrown624
1 Replies

5. Shell Programming and Scripting

Transfer Of Files

How to transfer the files in windows server to the unix server by using the unix or ftp commands? (1 Reply)
Discussion started by: vinay123
1 Replies

6. Shell Programming and Scripting

Copying specific files from remote m/c to specific folders

Hi All, I am trying to rsync some of the latest files from remote m/c to my local linux box. Folder structure in my remote m/c looks like this /pub/Nightly/Package/ROLL/WIN /pub/Nightly/Package/SOLL/sol /pub/Nightly/Package/SOLL/linux Each of the folder contains gzip files which on daily... (0 Replies)
Discussion started by: jhoomsharabi
0 Replies

7. UNIX for Dummies Questions & Answers

How to transfer files

please help me to transfer files from one server to another one i am having problem in it thanks (1 Reply)
Discussion started by: pankaj001np
1 Replies

8. UNIX for Dummies Questions & Answers

How to transfer files

(0 Replies)
Discussion started by: spoonman
0 Replies

9. Shell Programming and Scripting

transfer of specific file content to another file

What commands do you need to transfer a specfic portion of a file content to another file? eg file_one has 00012 10012 00013 10013 00014 10014 So I just want to transfer all the values of the second column ie 10012, 10013, 10014 to be transferred to file_two? Thanks in advance.... (1 Reply)
Discussion started by: mem101
1 Replies

10. UNIX for Advanced & Expert Users

How do i transfer files

Im trying to transfers a file from one unix server to another , make some changes and then send it back to the original server. All this using modems. I've been using "cu" and i can "get" the file but i can't "put" it. Besides I need to do this using a shell script. I can write a script to get... (4 Replies)
Discussion started by: phsoft
4 Replies
Login or Register to Ask a Question

Featured Tech Videos