Назад | Перейти на главную страницу

какой простой способ исключить папки в / home во время резервного копирования

Я делаю резервную копию, используя

for a in /home/*
do
//do backup
done

Я хочу исключить некоторые папки в / home. но цикл for берет все папки i там.

есть ли способ указать список исключений вверху, который можно использовать в цикле

Вам нужна какая-то оценка, чтобы проверить, что нужно исключить из списка папок, которые вы получаете в «для»; просто используя bash, это может быть (вы можете использовать все, что вам удобно, чтобы оценить, что исключить (например, sed, grep, awk, ...)):

exclusiondirs="/home/foo /home/bar" # list of folders to exclude from backup

for a in /home/*; do
if ! [[ "$exclusiondirs" =~ $a ]]; then
    ...do backup...
fi
done

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

rsync -av /home/* --exclude /home/foo --exclude /home/var destination

Отредактировано:

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

if ! echo "$exclusiondirs" | grep -q "\b$a\b" ; then

Этот оператор grep будет работать в домашнем каталоге с такими именами, как (где некоторые каталоги имеют общие имена частей и включают в себя пробелы):

mkdir -p home/{foo,bar,foobar,a,b,c,a\ b
tree
`-- home
    |-- a
    |-- a b
    |-- b
    |-- bar
    |-- c
    |-- foo
    `-- foobar

~$ echo $exclusiondirs 
/home/foo /home/bar /home/a
~$ for a in /home/*; do if ! echo "$exclusiondirs" | grep -q "\b$a\b" ; then echo $a; fi; done
/home/a b
/home/b
/home/c
/home/foobar

Перейти к Пропуск нескольких файлов и папок раздел на этой странице.