Скрипты, перебирающие каталоги в поисках указанного c набора файлов и папок - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь создать сценарий, который будет проходить через все папки и подпапки rootDir в поисках указанного c набора папок и файлов. Если скрипт найдет папку (например, testfolder1), в которой находятся:

  • textfile.txt
  • image.jpg
  • (опционально) subtitles.dxfp
  • другая папка (например, testsubfolder1), содержащая video.mp4 файл
  • (опционально) другая папка (например, testsubfolder2), содержащая video_trailer.mp4 файл

создаст архив, содержащий textfile.txt, image.jpg, subtitles.dxfp (если они были найдены), video.mp4 и video_trailer.mp4 (если он был найден) и сохранит его в rootDir.

В настоящее время у меня есть фрагмент, который рекурсивно ищет все эти файлы, но это не значит, что video.mp4 и video_trailer.mp4 находятся в папках. Как мне изменить мой код, чтобы достичь желаемого эффекта? Я думаю, это должно выглядеть в начале, если были найдены textfile.txt, image.jpg и subtitles.dxfp, если это так, он смотрит, если существует папка, содержащая файл video.mp4, но не рекурсивно, и в конце он ищет другую папку, содержащую video_trailer.mp4 файл. Я прав? Я не знаю, как я должен правильно написать это в коде. Заранее благодарю за любые советы, приближающие меня к решению.

for dirpath, dirnames, filenames in os.walk(rootDir):
    jpg = glob.glob(os.path.join(rootDir, dirpath, '*.jpg'))
    mp4 = glob.glob(os.path.join(rootDir, dirpath, '*.mp4'))
    txt = glob.glob(os.path.join(rootDir, dirpath, '*.txt'))
    xml = glob.glob(os.path.join(rootDir, dirpath, '*.xml'))
    dxfp = glob.glob(os.path.join(rootDir, dirpath, '*.dxfp'))

    if jpg and mp4 and txt:
        if xml and dxfp:
            #Archive will have the same name as image
            tarName  = [i for i in filenames if ".jpg" in i] 
            tar = tarfile.open("{0}.tar".format(tarName[0].replace(".jpg","")), "w")

            for file in [jpg, mp4, txt, xml, dxfp]:
                tar.add(file[0])
            tar.close()
        else:
            tarName  = [i for i in filenames if ".jpg" in i] 
            tar = tarfile.open("{0}.tar".format(tarName[0].replace(".jpg","")), "w")
            for file in [jpg, mp4, txt]:
                tar.add(file[0])
            tar.close()

1 Ответ

0 голосов
/ 19 марта 2020

как насчет использования find?

find / -type f -name "*.jpg" -exec tar -czf /tmp/jpg.tar.gz {} \;

с помощью -u вы можете обновить существующие архивы.

Привет, fuchs

...