我有一些目录,其中包含不同数量的文件和子目录。所有没有扩展名的文件都必须tar
编辑。它们的名称可能会更改,因此无法对其进行硬编码。子目录还可能包含不相关的、不应包含在存档中的未指定数量的文件和子目录。
我希望能够用一行来完成此操作,而不使用任何.sh
脚本,以便可以尽可能方便地重现此过程。
示例目录结构:
$ ls -1F
bar-dir/
bar.with.dots
foo-directory/
foo-no-ext
quux.dir/
quux.ext
结果tar
应该只包含foo-no-ext
这种情况。
到目前为止我想到的最接近的答案是
tar -cf archive.tar --exclude=*.* --no-recursion *
但是,当在样本集上执行时,archive.tar
仍然包含子目录(即使是空的):
$ tar -tf archive.tar
bar-dir/
foo-directory/
foo-no-ext
答案1
此命令执行您想要的操作:
find * -maxdepth 0 -type f | tar -cf archive.tar --exclude=*.* -T -
该find
命令仅查找*
当前目录中的-maxdepth 0
所有文件-type f
(不是目录、设备或其他特殊文件)。结果文件将传递给 tar,以排除名称中包含点的文件。
答案2
怎么样:
tar -cf archive.tar `ls|grep "^[^.]*$"`
它对 shell 的要求不高,但是假设 grep 存在(我从未见过没有 grep 的系统)。