我想做什么备份?
- 用户主目录,其中包括
Desktop
,,,我需要备份每个用户Documents
Pictures
thunderbird
- 所有用户都位于
/home
具有各自用户名的分区中 - 有某些用户和文件
/home
需要排除
到目前为止我已经尝试过什么?
$ tar cvf home01 -T include /home
笔记:T 表示仅采用文件中提到的内容,但不起作用
$ find . \( -name \*Desktop -o -name \*Documents\* -o -name \*Pictures\* -o -name \.thunderbird\* \) |
xargs tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.zip
笔记:它会备份提及目录,但会将每个用户的目录放入一个文件夹中。
例如
$ ls -l /home
/home/user1/{Desktop,Documents,Pictures,.thunderbird}
/home/user2/{Desktop,Documents,Pictures,.thunderbird}
/home/user3/{Desktop,Documents,Pictures,.thunderbird}
/home/user4/{Desktop,Documents,Pictures,.thunderbird}
/home/user5/{Desktop,Documents,Pictures,.thunderbird}
我只需要从中进行user1
、user2
主user3
目录备份并排除user4
,user5
答案1
你快到了!这应该做:
tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.zip */{Desktop,Documents,Pictures,.thunderbird} --exclude=user4 --exclude=user5
答案2
这是一种保留命令使用的方法find
:
$ find . \( -type d -path */Desktop -o -path */.thunderbird -o -path */Pictures \\) \! -path '*user[45]*' -prune | xargs tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.gz
这是一个更简单的版本:
$ find . \( -type d \
-path */Desktop -o -path */.thunderbird -o -path */Pictures \) \
\! -path '*user[45]*' -prune \
| xargs tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.gz
这将找到名称位于第一个括号块中的所有目录\( ... \)
。这些是目录:
*/Desktop
*/thunderbird
*/Pictures
第二部分排除与模式匹配的任何路径*user[45]*
。这些已从列表中删除。最后将生成的目录列表传递给 tar。
需要考虑的其他事项
以上是不是防弹。它将排除包含该字符串user4
或user5
其中的路径。此外,还应注意确保您构建为命令的任何内容都可以处理文件名中的空格。