Search code examples
bashubuntuscp

How to use scp in a bash script and wildcards


I have a bash script to retrieve files from remote server with scp.

My script looks like this:

read -p 'Enter pattern: ' VAR_DATE

SCPUSER='user'
SCPHOST='server.de'
SCPDIRECTORYREMOTE='/some/directory/remote'
LOCALDIR='/my/local/directory/somewhere'

scp $SCPUSER@$SCPHOST:"$SCPDIRECTORYREMOTE/test.txt" $LOCALDIR
scp $SCPUSER@$SCPHOST:"$SCPDIRECTORYREMOTE/*_$VAR_DATE.pdf" $LOCALDIR

Unfortunately, only the first file (test.txt) get downloaded. By all the other files where I use the wildcard (*) I get the error scp: /some/directory/remote/*_MY_PATTERN No such file or directory

I tried many solutions suggested using single and/or double quotes.

No one worked so far. What am I doing wrong?

UPDATE Here is the output of bash -x

+ read -p 'Enter pattern: ' VAR_DATE
Enter pattern: dffff
+ VAR_DATE=dffff
+ SCPUSER=user
+ SCPHOST=server.de
+ SCPDIRECTORYREMOTE=/some/directory/remote
+ LOCALDIR=/my/local/directory/somewhere
+ scp user@server.de:/some/directory/remote/test.txt /my/local/directory/somewhere
test.txt                                                                                       100% 2120    77.8KB/s   00:00    
+ scp 'user@server.de:/some/directory/remote/*_dffff' /my/local/directory/somewhere
scp: /some/directory/remote/*_dffff: No such file or directory

Solution

  • I suspect an issue with local globbing. And this looks like an excellent place to use tar and ssh. Something like,

    ssh $SCPUSER@$SCPHOST "tar czf - $SCPDIRECTORYREMOTE/*_$VAR_DATE*" \
        | tar xvzf - -C $LOCALDIR