bash - find -exec with \; runs but + terminator fails with "missing argument to -exec" -


this question has answer here:

sometimes find command refuses execute + terminator -exec, changing + \; allows exec run.


consider, after following setup:

find_args=( -type f -name "*users*" -cmin -60 ) rsync_args=( -avhp -e 'ssh  -i /home/some_user/.ssh/id_rsa -c arcfour' ) dest=some_user@some_host:/some/destination/ 

this works:

# runs rsync once per file, slower should need find . "${find_args[@]}" -exec rsync "${rsync_args[@]}" {} "$dest" \; 

...but 1 fails:

# same, except + rather \; # ...should use same rsync call multiple files. find . "${find_args[@]}" -exec rsync "${rsync_args[@]}" {} "$dest" + 

...with error find: missing argument '-exec'.

i'm using gnu findutils 4.4.2, documented support + argument.

in find -exec ... {} +, + must immediately after {} (and inserted arguments must in trailing position). given command not meet requirement.


consider following workaround:

find . -type f -name "*users*" -cmin -60 \   -exec sh -c 'rsync -avhp -e "ssh -i /home/some_user/.ssh/id_rsa -c arcfour" "$@" some_user@some_host:/some/destination/' _ {} + 

because sh -c [...] line longer rsync line runs, argument list passed former guaranteed work latter, expanding "$@" succeed.


Comments

Popular posts from this blog

account - Script error login visual studio DefaultLogin_PCore.js -

xcode - CocoaPod Storyboard error: -