I have a set of scripts that I use to download files via FTP and then delete them from the server.
It works as follows:
for dir in `ls /volume1/auto_downloads/sync-complete`
do
if [ "x$dir" != *"x"* ]
then
echo "DIR: $dir"
echo "Moving out of complete"
# Soft delete from server so they don't get downloaded again
ssh [email protected] mv -v "'/home/dan/Downloads/complete/$dir'" /home/dan/Downloads/downloaded
Now $dir could be "This is a file" which works fine.
The problem I'm having is with special characters eg:
- "This is (a) file"
- This is a file & stuff"
tend to error:
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `mv -v '/home/dan/Downloads/complete/This is (a) file' /home/dan/Downloads/downloaded'
I can't work out how to escape it so both the variable gets evaluated and the command gets escaped properly. I've tried various combinations of escape characters, literal quotes, normal quotes, etc
rsync --remove-source-filesserverfault.com/a/363925/69736 . Much easier!diris being set to the single string 'This is (a) file. It should be set successively to 4 separate strings 'This', 'is', '(a)', and 'file'. Don't parse the output ofls`; switch the directory and iterate over a glob (see my answer for details).[ "x$dir" != *"x"* ]-- this only works for pattern matching in[[, not[