Я делаю резервную копию, используя
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
Перейти к Пропуск нескольких файлов и папок раздел на этой странице.