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

Патч ядра linux-vserver и связанное с ним пользовательское пространство (см. http://linux-vserver.org/) позволяют запускать программы в их собственных изолированных контейнерах, не требуя полной виртуализации гостевой ОС.

Контейнеры linux-vserver имеют собственное пространство имен монтирования, собственное сетевое пространство имен, собственный контекст безопасности и т.д.

Обратите внимание, что linux-vserver был разработан в основном для запуска серверов; хотя вы можете запускать настольные приложения в контейнере linux-vserver, вам нужно будет знать, что вы делаете.

Другой подход заключается в использовании AppArmor для ограничения того, что разрешено делать вашей программе.

1
29.04.2019, 23:32
1 ответ

Вы можете использовать find... -type fс циклом bash for -. В цикле комбинация mkdir -pи dirnameпозволит вам воссоздать структуру папок перед простым копированием каждого файла с помощью cp.

#!/bin/bash

dirA="/NAS/data/dir1/"
dirB="/mnt/databackup/dir1/"
while read -r file
do
    relative="${file##"$dirA"}"
    newfile="$dirB$relative"
    echo mkdir -p "$(dirname "$file")"
    echo cp -at "$file" "$newfile"
done < <(find "$dirA" -type f -mtime -1)
  • read— это встроенная функция bash. Он классически используется с -r, чтобы избежать некоторых проблем с граничным -случаем. Он читает по одной строке (за раз )из своего stdin. Здесь stdinявляется результатом find.
  • ${var##string-to-remove}является формой подстановки параметров
  • newfile="$dirB$relative". Это классическая конкатенация bash
  • $(). Эта конструкция bash называется подстановкой команд
  • mkdir -pсоздать каталог и всех его предков по мере необходимости
  • cmd < fileэто классическое перенаправление
  • <(cmd)это называется подстановкой процесса . Он заменяет имя файла в качестве дескриптора стандартного ввода [>()] или стандартного вывода [<()] команды.

Вы можете использовать сайт объяснения для получения более подробных объяснений.

0
28.01.2020, 00:12

Теги

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