-1

В основном у меня есть эта структура каталогов в Linux.

Backup
 Dir_1 
     Sub_Dir_1
          file_1  90 GB
          file_2  10 GB
     Sub_Dir_2
          file_1  20 GB

Restore
 Dir_1
     Sub_Dir_1
         file_1 0 bytes
         file_2 0 bytes
     Sub_Dir_2
         file_1 0 bytes

И список продолжается.
Я могу распаковать весь каталог, но это займет некоторое время из-за размеров файлов в каждом подкаталоге.

Я хочу создать скрипт, который будет создавать резервную копию всей структуры каталогов и сможет восстанавливать один и тот же каталог на другом компьютере, но обнуляя все файлы в этом подкаталоге.
Все, что я хочу, это их имя каталога и имена файлов. Это возможно?

1 ответ1

0

Разделить на подзадачу

В общем, когда вы не можете найти быстрое полное решение вашей проблемы, вы можете разделить его на подзадачи, которые легче решить.

  • Один из способов - создать tar файл со структурой каталогов и list of files к которым нужно прикасаться, внутри структуры каталогов, которые вы можете сжать после. Вам не нужно создавать всю структуру каталогов, и у вас будет только два файла.
    С помощью touch команды [ 1 ] вы можете обновить время модификации файла, а если не существует, вы создадите пустой (!). После того, как вы создали копию структуры каталогов, вы можете прикоснуться к файлам внутри.

    Этот скрипт может создавать файлы (tar+txt) в вашем текущем каталоге.

    #!/bin/bash
    HomeDir=$(pwd)
    BackupDIR="Backup"      # Change here
    
    TarFileName="$HomeDir/Directory_Structure.tar"
    ListFileName="$HomeDir/File_List.txt"
    
    cd "$BackupDIR"
    
    tar -cf "$TarFileName"  --no-recursion --files-from <(find . -type d)
    find . -type f -exec echo touch \"{}\" \; > "$ListFileName"
    gzip --best "$ListFileName" "$TarFileName"    # this to compress them
    

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

    tar -zxf Directory_Structure.tar.gz
    zcat File_List.txt.gz | /bin/bash
    

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

  • Другой способ - создать локальную копию каталога и структуры. Опять же после того, как вы создали копию структуры каталогов, вы можете прикоснуться к файлам внутри.
    Затем вы можете сделать резервную копию всего с помощью tar .

    Недостатки в том, что первоначальное время создания и модификации, права собственности и атрибуты будут потеряны. При необходимости вы должны поставить после вручную, и это усложнит ваш сценарий. (touch -d "$(date -R -r filename)" Restore/filename ...)
    Вам понадобится много не очень удобных inode, если у вас есть миллионы файлов.

    Хорошим моментом является то, что вы можете создать локальную копию структуры каталогов интеллектуальным способом (например, с помощью tar или rsync ; при правильных параметрах это сохранит все заботы о некоторой патологии).

  • Последнее, но не менее важное - использовать что-то вроде модуля tarfile для python [ 2 ] для создания вашего tar-файла, управляя каждым типом (файл и каталог по-разному): будьте смелыми!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .