В вашей команде есть несколько проблем.
Первая - сжатый архив не может быть обновлен. Вам нужно сначала создать несжатый архив, обновить его и, наконец, сжать.
Вторая - синтаксис tar
неверен, первый пункт -exec
должен использовать либо +
, либо \;
, но не оба.
Третий вариант более тонкий и возникает, если оставить терминатор +
, то второе предложение -exec
будет выполняться для каждого файла по порядку, пока первое будет ждать, пока список файлов для сохранения заполнит строку окружения для запуска. Когда это произойдет, все файлы, которые будут сохранены первым -exec
, уже будут удалены вторым -exec
, поэтому tar
завершится неудачно, и вы потеряете все свои файлы.
Поскольку нет сомнений, что вы используете GNU tar
, вот простой способ добиться желаемого:
tar --files-from <(find . \( -name "*.c" -o -name "*.sh*" \)) \
--remove-files -cjf mycompress.bz2.tar
GNU tar документирован так, что удаляет файлы только после их сохранения:
$ man gtar
...
--remove-files
remove files after adding them to the archive
...
Обратите внимание, что предложенная мной команда не сможет обработать файлы со встроенной новой строкой, но это должно быть довольно маловероятным событием.
commands
está en desuso y debe reemplazarse con llamadas subprocess
. Un reemplazo para commands.getoutput()
essubprocess.Popen().communicate()
:
import subprocess
import shlex
command = shlex.split('/bin/ls -l -a -h')
process = subprocess.Popen(command, stdout=subprocess.PIPE)
stdout, stderr = process.communicate()
bandit
probablemente seguirá generando un problema de baja gravedad porque todavía usa subprocess
, que no es seguro en sí mismo como cualquier cosa que invoque un shell, pero esto es inevitable. Vea la advertencia restante como un recordatorio sobre una posible inseguridad en su código -dependiendo de lo que realmente esté llamando en un shell, debe hacer la verificación usted mismo -¿es un comando codificado en una constante de cadena, o un entrada del usuario, o algo variable dependiendo del código de llamada? En cualquier caso, siempre se aconseja hacer la higienización,Python tiene el módulopipes
para eso.
La forma "estándar" sería subprocess
, según la respuesta de Hoefling, pero hay algunas formas más modernas disponibles si no le importa usar bibliotecas externas.
enviado ha sido desaprobado por delegador y así es como se ve:
In [1]: import delegator
In [2]: print delegator.run('pwd').out
/home/vince
Lo instalé con:
pip install git+https://github.com/kennethreitz/delegator.py.git@v0.1.0
import subprocess
commands = subprocess
Оставьте оставшийся код таким же, он будет работать как есть