Bash-скрипт для резервного копирования и восстановления структуры каталогов

в принципе я эту структуру каталогов в 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

и список продолжается.


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

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


Все, что я хочу это их имена каталогов и файлов. Такое возможно?

5
задан Hastur
источник

1 ответов

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

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

  • способ-создать a tar файл структуры каталогов и A list of files быть коснулся внутри структуры каталогов, которые можно сжать после. Вам не нужно создавать всю структуру каталогов, и у вас будет только два архив.

    С touch command[1] вы можете обновить время изменения файла, и если не существует, вы создадите пустой (!). После создания копии структуры каталогов вы можете touch файлы внутри.

    этот скрипт может создавать файлы (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
    

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

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

    Тогда вы можете сделать резервную копию всех с tar.

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

    Вам понадобится много inodes не уютно, если у вас есть zillions файлов.

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

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

0
отвечен Hastur 2016-06-30 11:22:11
источник

Другие вопросы bash linux script tar