【发布时间】:2015-01-28 16:17:09
【问题描述】:
到处寻找解决方案,但找不到。不知何故,我总是在尝试没有人想到的独特场景。诡异的。无论如何,这是场景......
foldertop (keep)
-foldersub (keep)
--foldersubsub (keep)
----foldersubsubsub (keep)
------files (exclude)
----files (exclude)
--files (keep)
-files (keep)
我想压缩所有目录和子目录。我想要整个文件夹结构,但我不想要所有文件。我想保留一些文件夹中的一些文件,而忽略其他目录中的其他文件。
我唯一知道要做的就是像这样排除我不想要的文件的文件夹:
tar -cvf bak_1-28-15.tar --exclude=foldertop/foldersub/foldersubsub foldertop
也许我可以添加一个星号来保留 foldersubsub 目录并排除其中的所有文件,如下所示:
tar -cvf bak_1-28-15.tar --exclude=foldertop/foldersub/foldersubsub/* foldertop
但这也将排除 foldersubsubsub 目录。我想排除 foldersubsubsub 中的所有文件,但保留 foldersubsubsub 目录。
我该怎么做?
在没有 find 方法的情况下尝试了这个。不起作用:
tar -cvf bak_1-28-15.tar --exclude=foldertop/foldersub/foldersubsub/* --include=foldertop/foldersub/foldersubsub/foldersubsubsub --exclude=foldertop/foldersub/foldersubsub/foldersubsubsub/* foldertop
我得到的错误是:
tar: unrecognized option '--include=foldertop/foldersub/foldersubsub/foldersubsubsub'
把 include 放在最后也没有用,它仍然是一个无法识别的选项。
tar -cvf bak_1-28-15.tar --exclude=foldertop/foldersub/foldersubsub/* --exclude=foldertop/foldersub/foldersubsub/foldersubsubsub/* --include=foldertop/foldersub/foldersubsub/foldersubsubsub foldertop
将文件夹放在末尾而中间没有包含也不起作用。不给和报错,但是foldersubsubsub目录不包括在内。
tar -cvf bak_1-28-15.tar --exclude=foldertop/foldersub/foldersubsub/* --exclude=foldertop/foldersub/foldersubsub/foldersubsubsub/* foldertop foldertop/foldersub/foldersubsub/foldersubsubsub
接下来要尝试star*.star*,所以我只定位文件而不是文件夹。像这样:
tar -cvf bak_1-28-15.tar --exclude=foldertop/foldersub/foldersubsub/*.* --exclude=foldertop/foldersub/foldersubsub/foldersubsubsub/*.* foldertop
这似乎成功了。这对我有用,因为不会有没有点的文件,也不会有以点开头的文件。
【问题讨论】:
-
我假设模式尝试不起作用?目前尚不清楚您是否尝试过但失败了,或者“但是……”是否在谈论上一次尝试。您可以使用查找/等。构建文件列表并将其传递给 tar 而不是直接从文件夹名称递归。
-
没有费心去测试一个星号,因为这不是我想要的。它很接近但并不完美。我需要在提取后手动添加那些 subsubsub 文件夹。上面这个例子很简单。有更多的 subsub 文件夹有自己的 subsubsub 文件夹。
-
哦...我错过了最后一句话中额外的
sub。对不起。是的,我可能会使用find来构建类似这样的文件列表。 -
不知道怎么用 find 那么多。有例子吗?
-
而不是
--include尝试在命令行末尾添加这些目录? (比如foldertop?)
标签: linux shell unix command-line