Команда find с exec в подпроцессе python выдает ошибку

Я пытаюсь выполнить следующую команду с помощью модуля подпроцесса (Python)

/usr/bin/find <filepath> -maxdepth 1 -type f -iname "<pattern>" -exec basename {} \;

Но это дает следующую ошибку:

/usr/bin/find: missing argument to `-exec'

Я предполагаю, что это связано с побегом некоторых персонажей. Но не понимаю, как преодолеть это.

Любая помощь приветствуется. Благодарю.

3 ответа

Помог ответ на другой вопрос: /questions/44445011/ekvivalent-python-dlya-poiska-exec/44445020#44445020

import subprocess

subprocess.Popen(('find', '/tmp/mount', '-type', 'f',
              '-name', '*.rpmsave', '-exec', 'rm', '-f', '{}', ';'))

То, что я не мог понять, это то, что точку с запятой не нужно было экранировать, так как обычно точка с запятой интерпретируется с помощью bash и должна быть экранирована.

В bash это равнозначно:

find /tmp/mount -type f -name "*.rpmsave" -exec rm -f {} \;

Еще один совет: использование синтаксиса r'bla'позволяет использовать обратную косую черту без кавычек:

r'... -exec basename {} \;'

Обеспечивает лучшую читаемость.

Помнишь побег " требуется, а также бежать \ раньше использовался ; также требуется

ваша команда может выглядеть примерно так:

p1 = subprocess.Popen(["/usr/bin/find", "<filepath> -maxdepth 1 -type f -iname \"<pattern>\" -exec basename {} \\;"])
p1.communicate()
Другие вопросы по тегам