[Tutor] symlinking dirs with spaces

Dave Angel davea at davea.name
Mon Apr 29 03:58:44 CEST 2013


On 04/28/2013 08:54 PM, mike wrote:
> On 04/28/2013 07:37 PM, Dave Angel wrote:
>> On 04/28/2013 08:17 PM, mike wrote:
>>>
>>>>     <SNIP>
>>>>>
>>>
>>> def sync_new():
>>>      durFind = raw_input("Enter the duration of time in days you want to
>>> link")
>>>      durFind = int(durFind)
>>>      fileExcl = "*torrent*"
>>>      linkNew = ['find', '%s' % musicDir, '-maxdepth 2', '-mtime %s' %
>>> durFind, '-not', '-name', '%s' % fileExcl, '-exec addsync {} \;']
>>>      subprocess.call(linkNew)
>>>
>>         <SNIP>
>>>
>>> Running the script with the pushnew argument results in the following
>>> error from find:
>>>
>>> find: unknown predicate `-maxdepth 2'
>>>
>>> I'm thinking this is also related to my usage of subprocess? I just
>>> started carving this out right now so I'm still debugging but if anyone
>>> sees anything obvious I would appreciate it.
>>>
>>
>> Your linkNew list doesn't have separate items for each argument to find.
>>   The first example is that "-maxdepth" and "2" should be separate list
>> items.  The only other spot I notice is the -exec item, which should be
>> distinct from the following.
>>
>> I don't understand why you have things like '%s' % musicDir, when
>> musicDir is already a string.  That list item should be just musicDir,
>> which would read much better.
>>
>>
> I separated the maxdepth argument with '-maxdepth', '2', seems and now
> it is focusing on the exec portion which i'm trying to figure out how to
> separate and make it sane as far as single/double quotes go.

If I were sure enough about the syntax to find (I only use -exec about 
once a year, and have to look it up each time), I could be explicit.

But if you want   -exec addsync {}
you should be using 3 different list items.

I don't think the \; means anything useful since you're not using the 
shell.  But if find needs a semicolon there somehow, I might try just ";"

Could you show us exactly what the find command would look like if you 
were executing it at the bash shell prompt?


>
> Can you elaborate on what you mean regarding the musicDir variable? I
> have a loadDir which specifies where the symlinks reside but the actual
> root of the media directory is /opt/data/music and it's organized via
> directories based on genres which is why I am specifying musicDir
> instead of loadDir for this function
>

Simple.  Since musicDir is a string,
     "%s" % musicDir
is a verbose way of saying
      musicDir

Likewise for fileexecl.  Neither is an error, just confusing.


-- 
DaveA


More information about the Tutor mailing list