Каков Python путь к тому, чтобы рекурсивно установить полномочия файла?

Каков "Python путь" для рекурсивной установки владельца и группы в файлы в каталоге? Я мог просто передать 'показанный-R' команда для окружения, но я чувствую, что пропускаю что-то очевидное.

Я слоняюсь без дела с этим:


import os  
path = "/tmp/foo"  
for root, dirs, files in os.walk(path):  
  for momo in dirs:  
    os.chown(momo, 502, 20)

Это, кажется, работает на установку каталога, но сбои при применении к файлам. Я подозреваю, что файлы не получают целый путь, таким образом, показанный сбои, так как он не может найти файлы. Ошибка:

'OSError: [Errno 2] Никакой такой файл или каталог: 'foo.html'

Что я пропускаю здесь?

35
задан Julien Chastang 15 July 2017 в 16:09
поделиться

4 ответа

Списки dirs и файлов всегда относятся к корню , т. Е. Они являются basename () файлов / папки, т.е. в них нет / (или \ в Windows). Вам нужно присоединить каталоги / файлы к root , чтобы получить весь их путь, если вы хотите, чтобы ваш код работал на бесконечных уровнях рекурсии:

import os  
path = "/tmp/foo"  
for root, dirs, files in os.walk(path):  
  for momo in dirs:  
    os.chown(os.path.join(root, momo), 502, 20)
  for momo in files:
    os.chown(os.path.join(root, momo), 502, 20)

Я удивлен, что модуль shutil не имеет функции для этого.

42
ответ дан 27 November 2019 в 07:12
поделиться

попробуйте os.path.join (root, momo) , который даст вам полный путь

4
ответ дан 27 November 2019 в 07:12
поделиться

Не забудьте также цикл for f в файлах . Точно так же не забудьте os.path.join (root, f) , чтобы получить полный путь.

1
ответ дан 27 November 2019 в 07:12
поделиться
import os  
path = "/tmp/foo"  
for root, dirs, files in os.walk(path):  
  for momo in dirs:  
    os.chown(momo, 502, 20)
  for file in files:
     fname = os.path.join(root, file)
     os.chown(fname, aaa, bb)

замените aaa и bb как хотите

6
ответ дан 27 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: