Я переименовал имя класса css в ряде шаблонов (python-django). Однако файлы css широко распространены в нескольких файлах в нескольких каталогах. У меня есть фрагмент python, чтобы начать переименование из корневого каталога, а затем рекурсивно переименовать все файлы css.
from os import walk, curdir
import subprocess
COMMAND = "find %s -iname *.css | xargs sed -i s/[Ff][Oo][Oo]/bar/g"
test_command = 'echo "This is just a test. DIR: %s"'
def renamer(command):
print command # Please ignore the print commands.
proccess = subprocess.Popen(command.split(), stdout = subprocess.PIPE)
op = proccess.communicate()[0]
print op
for root, dirs, files in walk(curdir):
if root:
command = COMMAND % root
renamer(command)
Не работает, выдает:
find ./cms/djangoapps/contentstore/management/commands/tests -iname *.css | xargs sed -i s/[Ee][Dd][Xx]/gurukul/g
find: paths must precede expression: |
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
find ./cms/djangoapps/contentstore/views -iname *.css | xargs sed -i s/[Ee][Dd][Xx]/gurukul/g
find: paths must precede expression: |
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Когда я копирую и запускаю ту же команду (напечатанную выше), find
не выдает ошибку, и sed либо не получает входных файлов, либо работает.
Что не так с фрагментом python?
shell=True
для работы каналов. См., например, этот ответ. - person Lukas Graf   schedule 09.11.2013op = subprocess.check_output(["find", root]+ r"-iname \*.css -exec sed -i s/foo/bar/gi {} +".split())
- person jfs   schedule 09.11.2013