「保存」期間の日付と一致しないフォルダ内のファイルを削除するには、以下のスクリプトを作成してください。例えば。この名前に部分一致するファイルをすべて削除します。Pythonサブプロセススクリプトが失敗する
このコマンドはシェルからは機能しますが、サブプロセス呼び出しでは失敗します。
/bin/rm /home/backups/!(*"20170920"*|*"20170919"*|*"20170918"*|*"20170917"*|*"20170916"*|*"20170915"*|*"20170914"*)
#!/usr/bin/env python
from datetime import datetime
from datetime import timedelta
import subprocess
### Editable Variables
keepdays=7
location="/home/backups"
count=0
date_string=''
for count in range(0,keepdays):
if(date_string!=""):
date_string+="|"
keepdate = (datetime.now() - timedelta(days=count)).strftime("%Y%m%d")
date_string+="*\""+keepdate+"\"*"
full_cmd="/bin/rm "+location+"/!("+date_string+")"
subprocess.call([full_cmd], shell=True)
これはスクリプトが返すものです:
#./test.py
/bin/rm /home/backups/!(*"20170920"*|*"20170919"*|*"20170918"*|*"20170917"*|*"20170916"*|*"20170915"*|*"20170914"*)
/bin/sh: 1: Syntax error: "(" unexpected
Pythonのバージョンは@hjpotterがサブプロセスとして/bin/sh
使用する、と述べたのと同様のPython 2.7.12
シェル/ターミナルからコマンドを実行しているときに、bashのグロブの展開やその他の置換を使用している場合。しかし、Pythonはコードを実行するために '/ bin/sh'('/bin/bash'ではなく)に依存しています。 – hjpotter92