[Tutor] symlinking dirs with spaces

Dave Angel davea at davea.name
Mon Apr 29 04:35:06 CEST 2013


On 04/28/2013 10:04 PM, mike wrote:
> On 04/28/2013 08:59 PM, Dave Angel wrote:
>> 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.
>>
>>
>
> I didn't see your response dave, this would be the full syntax:
>
>
>
> find /opt/data/music -maxdepth 2 -mtime -5 -not -name "*torrent*" -exec
> addsync {} \;
>
>

Then I think you should change:
      '-exec', 'addsync {} \;']

to
      '-exec', 'addsync", "{}" ";"]



-- 
DaveA


More information about the Tutor mailing list