У меня есть несколько каталогов, и я хочу, чтобы каталоги в течение 7 дней были удалены. У меня уже реализован код, но он, похоже, не работает. Может ли кто-нибудь увидеть, где я ошибаюсь?Удалить старые каталоги в Python
def delete_sandbox():
for directories in os.listdir(os.getcwd()):
if not os.path.isdir(directories) or not os.stat(directories).st_ctime < time.time()-(7*24*3600):
continue
os.chdir(directories)
drop_sandbox()
os.chdir(rootDir)
os.system("sudo rm -rf "+directories)
print 'Folders older than 7 days old dropped and removed'
Спасибо за любую помощь
папок песочница падение, но не удалять. Я хочу, чтобы программа переходила в каждую из этих папок, удаляла песочницу, возвращалась в корневой каталог и удаляла все старые каталоги. Когда я это делаю, папки все еще существуют.
Также эта функция работала, когда у меня были каталоги, удаленные строковой датой, хранящейся в имени папки. Но теперь, когда я пытаюсь получить временную метку, она перестала работать.
Я проверил 'rm -rf'+directories
и не удаляет старые папки. Когда я пытаюсь shutil.rmtree
я получаю сообщение об ошибке:
Traceback (most recent call last):
File "yep.py", line 21, in <module>
delete_sandbox()
File "yep.py", line 18, in delete_sandbox
shutil.rmtree(directories)
File "/home/build/workspace/downloads/Python-2.6.4/Lib/shutil.py", line 208, in rmtree
onerror(os.listdir, path, sys.exc_info())
File "/home/build/workspace/downloads/Python-2.6.4/Lib/shutil.py", line 206, in rmtree
names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'Debug'
есть ли другой способ, чтобы удалить эти папки?
У меня это работает, я использовал shutil.rmtree
, и все, казалось, сработало. Спасибо за любую помощь. Измененный код:
def delete_sandbox():
for directories in os.listdir(os.getcwd()):
if not os.path.isdir(directories) or not os.stat(directories).st_ctime < time.time()-(sbox_age):
continue
os.chdir(directories)
drop_sandbox()
os.chdir(rootDir)
shutil.rmtree(directories)
print 'Sandboxes older than 7 days old dropped and removed'
delete_sandbox()
что это значит *, кажется, не работает *? вы получаете сообщение об ошибке? – SilentGhost
Это не удастся, если какое-либо имя каталога включало пробелы (при вызове os.system), или если текущий каталог на входе не был 'rootDir'. Вы получаете ошибку, и если да, то что и где? Или неожиданное поведение, и если да, то что и где? Некоторые 'print' дадут нам больше информации (в настоящее время вы даете нам около 0 бит ;-). –
Общее предложение/предупреждение при вызове системы, особенно когда задействован «rm». Дайте вашей функции вариант с сухим запуском, который по умолчанию является True, который печатает системные команды, которые он будет запускать. – MattH