[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Findutils-patches] xargs problem
From: |
aws backup |
Subject: |
Re: [Findutils-patches] xargs problem |
Date: |
Tue, 20 Dec 2016 22:57:18 +0200 |
Thank you Dale for the detailed explanation :-)
> On 20 Dec 2016, at 16:20, Dale R. Worley <address@hidden> wrote:
>
> aws backup <address@hidden> writes:
> [adding a line break and indentation:]
>> fswatch -0 -Ie ".*\.*$" -i ".*\.mp4$" /path/to/folder |
>> xargs -0 -n 1 -I {} /path/to/shellscript.sh
>>
>> shellscript.sh:
>>
>> s3cmd put {} s3://bucket/ <s3://bucket/>
>>
>> I get following failure message:
>>
>> ERROR: Parameter problem: Nothing to upload.
>>
>> So I get stuck already on the first point.
>> Sorry I am a beginner in shell scripting.
>> How do I get it into the script?
>
> When you run a shell script, the arguments that follow the script name
> are assigned to the variables $1, $2, etc. within the script. So you
> want to say:
>
> fswatch -0 -Ie ".*\.*$" -i ".*\.mp4$" /path/to/folder |
> xargs -0 -n 1 -I {} /path/to/shellscript.sh {}
>
> (IIRC, you can exploit the defaults by saying
> "xargs -0 -n 1 /path/to/shellscript.sh".)
>
> And have shellscript.sh say:
>
> s3cmd put "$1" s3://bucket/ <s3://bucket/>
>
> Then xargs runs commands like:
>
> /path/to/shellscript.sh /.../name-of-some-file
>
> and when shellscript.sh runs, $1 gets replaced with
> /.../name-of-some-file, effectively:
>
> s3cmd put /.../name-of-some-file s3://bucket/ <s3://bucket/>
>
> There are a lot of rules regarding exactly how quoting works within
> shell scripts, but in this case the essential rules are:
>
> - xargs does not invoke the shell to assemble and run the commands it
> runs. Hence, '/path/to/shellscript.sh {}' gets turned into the kernel
> call to run the program that you'd expect, the first item being
> /path/to/shellscript.sh and the second item being the filename that
> xargs dissects out -- regardless of any special characters that appear
> in the file name
>
> - The shell picks up the second argument to the kernel call and assigns
> it to the variable $1 without any further processing.
>
> - When the value of $1 is substituted into the shell line
>
> s3cmd put "$1" s3://bucket/ <s3://bucket/>
>
> the presence of "..." around $1 causes the value of $1 to be used as the
> first argument in the kernel call to run s3cmd, regardless of any
> special characters that appear in the value of $1. Without "...", if
> the value of $1 contained whitespace characters, the value would be
> divided into multiple arguments to the kernel call. (And possibly other
> transformations, I'd have to read the manual page carefully to get it
> right.)
>
> Dale
- Re: [Findutils-patches] xargs problem, (continued)
- Re: [Findutils-patches] xargs problem, Bernhard Voelker, 2016/12/20
- Re: [Findutils-patches] xargs problem, aws backup, 2016/12/20
- Re: [Findutils-patches] xargs problem, Bernhard Voelker, 2016/12/20
- Re: [Findutils-patches] xargs problem, aws backup, 2016/12/20
- Re: [Findutils-patches] xargs problem, Assaf Gordon, 2016/12/20
- Re: [Findutils-patches] xargs problem, aws backup, 2016/12/20
- Re: [Findutils-patches] xargs problem, Bernhard Voelker, 2016/12/21
- Re: [Findutils-patches] xargs problem, aws backup, 2016/12/22
- Re: [Findutils-patches] xargs problem, James Youngman, 2016/12/21
- Re: [Findutils-patches] xargs problem, Dale R. Worley, 2016/12/20
- Re: [Findutils-patches] xargs problem,
aws backup <=