不含父目录的 Tar 目录内容并排除子目录/文件

不含父目录的 Tar 目录内容并排除子目录/文件

简化的目录结构:

/root/test
/root/test/dir1
/root/test/dir2
/root/test/dir3
/root/test/dir4

我想 tar /root/test,这样当我提取存档时,我会得到 dir1 和 dir2。我想排除 dir3 和 dir4,以及可能的其他文件和子目录,具体取决于命令的特定应用。

我知道网上有很多 tar 示例和代码片段,但我似乎无法找到一个具体的示例或将网上可用的示例结合起来,使它像上面那样工作。任何帮助都将不胜感激。

答案1

怎么样

cd /
tar cvf /tmp/test.tar --exclude="./root/test/dir[34]" ./root/test

答案2

我认为我已经通过将这里所说的内容与一些实验结合起来做到了这一点。

tar -cvf test.tar --exclude-from=exclude --directory="/root/test" .

其中 exclude 是具有以下内容的文件:

dir3
dir4

答案3

如果你要压缩的文件夹数量有限,你可以这样做

tar -C /root/test -cf arch.tar dir1 dir2



root@pinkpony:~# ls /root/test/
dir1  dir2  dir3
root@pinkpony:~# pwd
/root
root@pinkpony:~# tar -C /root/test -cf arch.tar dir1 dir2
root@pinkpony:~# tar tf arch.tar 
dir1/
dir2/

编辑(使注释中包含的代码可读):

如果您有用于构建要 tar 的目录列表的复杂规则,则可能需要开始编写脚本:

root@pinkpony:~# (cd /root/test/ ; ls |grep -E '^dir(1|2)$' | xargs  tar cf /tmp/blah.tar )
root@pinkpony:~# tar tf /tmp/blah.tar 
dir1/
dir2/

你可以使用任何你需要的东西来代替那个愚蠢的 ls |grep 东西,这只是一个例子;xargs 是我想要指出你注意的部分

答案4

值得一提的是,您还可以指定一个文件来排除更长的文件或目录列表。这比调整长命令行更容易。

也请检查mycrpt一下快速、安全的加密方法。抱歉,有点太过了。

相关内容