I have an Ubuntu 10.04 OS, and if I do this on the terminal (it works):

$ ssh new_machine "find /tmp/test_*.csv -mtime +14 -exec rm '{}' \;"

But if I place it in a shell script, it does not work. I suspect it is related to the "*" wildcard. Any thoughts on doing this?

link|improve this question

8% accept rate
feedback

1 Answer

You don't want globbing at all, you want find to be doing that. I think this might work:

$ ssh new_machine "find /tmp -name 'test_*.csv' -mtime +14 -exec rm '{}' \;"

link|improve this answer
I just checked it and there are no files on the local machine. I am sending the command via ssh to the new_machine... – Carmen Oct 29 '10 at 18:55
1  
I got it backwards, you don't want to glob at all. Take a look at the edited answer. – Andrew Oct 29 '10 at 18:56
Interesting. That works. Can you explain why my original command was not working? What was happening to my wildcard? – Carmen Oct 29 '10 at 19:18
I'm not entirely sure, but I suspect that absolutely nothing was happening to it. The find command doesn't run in a shell when you invoke it via ssh. So there's nothing to expand the wildcard except find itself, and it may not do that on that argument. Try ssh new_machine "echo /tmp/test_*.csv" and see if you get what you expect. – Andrew Oct 29 '10 at 19:28
@Carmen: When you run the command without the quotes, the shell expands the wildcard in /tmp/test_*.csv. Normally the expansion is the list of matching file names, but if there happens to be no matching file, then the expansion is the single word /tmp/test_*.csv, as if there had been quotes, so only then does find see the argument you meant. – Gilles Oct 30 '10 at 0:14
show 1 more comment
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.