![Linux:Gnu-Tar 不包括](https://linux22.com/image/603476/Linux%EF%BC%9AGnu-Tar%20%E4%B8%8D%E5%8C%85%E6%8B%AC.png)
我正在尝试使用 GNU-Tar 对 Linux 服务器进行完整备份。文件系统如下所示:
├── backup
├── data
│ ├── d1
│ ├── d2
│ └── tmp
│ ├── tt1
│ ├── tt2
│ └── tt3
├── exclude
├── home
│ ├── a
│ ├── b
│ ├── c
│ └── d
├── proc
│ ├── pa
│ ├── pb
│ ├── pc
│ └── pd
├── sys
│ ├── s1
│ ├── s2
│ ├── s3
│ └── s4
└── tmp
├── t1
├── t2
└── t3
我想排除 tmp 和 proc,但保留 /data/tmp/*。但是,使用以下命令:
$tar -X exclude -cvpf - * | wc -l
使用此排除文件:
$cat exclude
proc/*
tmp/*
我发现 /data/tmp 也被排除了。我怎样才能包含 data/tmp 而排除 tmp?更重要的是,我应该如何理解 tar 的通配符解释和排除模式匹配。排除文件中的每个模式是否都像 grep 一样运行?
谢谢!
答案1
尝试修改tar
命令tar -X exclude -cvpf - .
(例如,将 更改*
为.
)并修改排除文件以说明
./proc/*
./tmp/*
编辑:真的吗?对我有用。这是我的目录结构:
|-- a
| |-- foo
|-- b
| |-- bar
| |-- tmp
| | |-- farr
|-- tmp
| |-- frotz
../exclude
这是我的文件的内容
./tmp/*
然后我做了tar cvf ../test.tar -X ../exclude .
并得到
./
./b/
./b/bar
./b/tmp/
./b/tmp/farr
./tmp/
./a/
./a/foo
请注意, 的内容./b/tmp
包括在内(./b/tmp/farr
被拾取),但 的内容./tmp
不包括在内(./tmp/frotz
未被拾取)。
tartar (GNU tar) 1.26
在 Fedora 16 上。