Сценарий, чтобы рекурсивно проверить полномочия и владельцев каталога и записать сценарий оболочки для воссоздания их

Я думаю, что что-то пошло не так с созданием ZIP-файла, потому что когда я создаю ZIP-файл в Windows, имеет (портативные) пересылающие кособыки:

zip.exe -r pip pip
updating: pip/ (244 bytes security) (stored 0%)
  adding: pip/pip.log (164 bytes security) (deflated 66%)

Но теперь, когда у вас есть файлы С именами файлов, которые содержат «Пути» с Backslashes, вы можете запустить следующую программу в unzip_dir :

#! /usr/bin/env python

# already created directories, walk works topdown, so a child dir
# never creates a directory if there is a parent dir with a file.
made_dirs = set()

for root, dir_names, file_names in os.walk('.'):
    for file_name in file_names:
        if '\\' not in file_name:
            continue
        alt_file_name = file_name.replace('\\', '/')
        if alt_file_name.startswith('/'):
            alt_file_name = alt_file_name[1:]  # cut of starting dir separator
        alt_dir_name, alt_base_name = alt_file_name.rsplit('/', 1)
        print 'alt_dir', alt_dir_name
        full_dir_name = os.path.join(root, alt_dir_name)
        if full_dir_name not in made_dirs:
            os.makedirs(full_dir_name)  # only create if not done yet
            made_dirs.add(full_dir_name)
        os.rename(os.path.join(root, file_name),
                  os.path.join(root, alt_file_name))

Это обрабатывает файлы в любом каталоге под каталогом, из которого запущена программа. Учитывая проблему, которую вы описываете, unzip_dir , вероятно, не имеет никаких подкаталоги, и программа может просто пройти через файлы в текущем каталоге.

0
12.05.2014, 18:42
3 ответа
[114772] Как yeti предложил в комментариях, я использовал команду find, чтобы найти все файлы и каталоги в каталоге и выдать их права/владельцев в chown или chmod команду. Я добавил подробный [115289]-v[115290] вариант, чтобы при выполнении результирующих скриптов оболочки вы могли видеть успех/ошибки команд:[12196]Теперь просто сделайте результирующие .sh файлы исполняемыми:[12197]Затем запустите их и выведите подробный отзыв в txt файл:[12198]Boom.[114779].
1
28.01.2020, 02:28
[114770] Вы упоминаете [115281] события [115282], и если у вас есть [115283] действительно [115284] много файлов, имеет смысл посмотреть на них. Вы можете захотеть взглянуть на [115285]inotifywatch[115286], который "прослушивает события файловой системы", например, изменение файловых разрешений. В операционной системе debian она находится в пакете [115287]inotify-tools[115288] .[114771].
0
28.01.2020, 02:28
[114764]В соответствии с комментарием @yeti, я думал об этом некоторое время назад, и, кажется, помню, как пришел к выводу, что что-то вроде[12194]и потом[12195]сработает. Помещение имени файла последним в выходные данные и использование [115269]read[115270] и нулевых терминаторов вместо новых строк [115271] должно сделать его безопасным даже для имен файлов с пробелами и другими специальными символами. В зависимости от того, откуда вы хотите выполнить вторую команду, может быть удобнее использовать имя файла с ведущим компонентом [115273]/путь/к/к/дир[115274] из команды [115275] найти [115276] удаленным, т.е. [115277]%P[115278] вместо [115279]%p[115280].[114769].
2
28.01.2020, 02:28

Теги

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