【发布时间】:2016-05-28 02:44:11
【问题描述】:
假设我有以下目录结构
dir/
├── subdir
│ ├── dir
│ │ └── TODO.txt
│ └── TODO.txt
└── TODO.txt
我希望在 Linux 上使用命令 tar 递归地将 dir/ 捆绑到一个 tarball 中,但 我想排除根 TODO.txt。如何使用相对路径指定它?
尝试 #1
tar -czf dir.tar.gz dir/ --exclude='TODO.txt'
不起作用:它摆脱了生成的 tarball 中的 every TODO.txt :
dir/
└── subdir
└── dir
尝试 #2
tar -czf dir.tar.gz dir/ --exclude='dir/TODO.txt'
这也失败了,因为dir 子目录也与此模式匹配。因此生成的 tarball 包含
dir/
└── subdir
├── dir
└── TODO.txt
有什么方法可以准确地指定我想用相对路径排除根 TODO.txt 吗?
【问题讨论】:
-
您不能在创建存档时简单地将单个文件移到一边吗?
-
否则,您可以使用
find的输出来提供tar命令,您可以通过grep -v过滤该输出,从而将模式锚定到命中的开头。 -
错误的站点,不是编程问题。
-
@tink 我不这么认为。只需查看与
tar标签相关的所有类似问题。 @arkascha 谢谢,这条线可以完成工作:find ./dir/ | grep -v "\./dir/TODO.txt"。然而,将输出提供给tar命令会给我带来奇怪的结果。我一直在挖掘。 -
@Backslash36 :仅仅因为某事反复发生并不能使它正确吗?