Каков "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'
Что я пропускаю здесь?
Списки 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
не имеет функции для этого.
попробуйте os.path.join (root, momo)
, который даст вам полный путь
Не забудьте также цикл for f в файлах
. Точно так же не забудьте os.path.join (root, f)
, чтобы получить полный путь.
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
как хотите