我正在使用备份
for a in /home/* do //do backup done
我想排除/ home中的一些文件夹。 但循环采取所有文件夹我在那里。
有什么办法,以便我可以在顶部指定排除列表,可以在循环中使用
您需要进行某种评估,以便检查您在“for”中获得的文件夹列表中要排除的内容; 只是使用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正则expression式有点棘手,在某些情况下很难实现,所以我用更强大的grep语句replace了它:
if ! echo "$exclusiondirs" | grep -q "\b$a\b" ; then
这个grep语句将在一个名字如dir(在某些dir中共享公共名称并包含空格)的home dir中工作:
mkdir -p home/{foo,bar,foobar,a,b,c,a\ b tree `-- home |-- a |-- ab |-- 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/ab /home/b /home/c /home/foobar
转到跳过此页面中的多个文件和文件夹部分。