$ find /tmp/a1
/tmp/a1
/tmp/a1/b2
/tmp/a1/b1
/tmp/a1/b1/x1
只是尝试
find /tmp/a1 -exec tar -cvf dirall.tar {} \;
根本行不通
任何帮助
-exec
为找到的每个文件运行一次指定的命令。因此,您每次运行命令时都在重新创建 dirall.tar。相反,您应该将 find 的输出通过管道传输到 tar。
find /tmp/a1 -print0 | tar --null -T- -cvf dirall.tar
请注意,如果您只是find
用来获取所有文件的列表/tmp/a1
而不进行任何类型的过滤,那么使用tar -cvf dirall.tar /tmp/a1
.
你离解决方案只有一个角色。该find
命令的exec
选项将为找到的每个文件执行该命令,因此您应该替换-c
为-r
以tar
进入附加模式。每次find
调用它,它都会附加一个文件:
rm -f dirall.tar
find /tmp/a1 -exec tar -rvf dirall.tar {} \;
hpux 有 cpio 吗?这将获取标准输入上的文件列表,并且某些版本将以 tar 格式写入输出。
我认为像“find /tmp/a1 | xargs tar cvf foo.tar”这样的东西会起作用。但请确保您首先有备份!