我的 cpio 存档只有一个文件 -
/./folder1/file1
我的目标是用另一个替代
file1
。
我将 cpio 存档解压到文件夹
/test
并替换 file1
。
我的结构:
/test/folder1/file1
我用这个命令创建了新的存档:
find ./test | cpio -o -F newArch
但是在
newArch
中,我的文件存储为 /folder1/file1
。
如何获得具有结构的档案
/./folder1/file1
cpio 没有任何前缀命令,尽管我仍然认为这是一个没有实际意义的练习,但您可以尝试它是否保留通过标准输入获取的文件名:
find ./test -printf "././%f\n"| cpio -o -F newArch
根据需要调整格式字符串的前缀。我没有 7zip 来测试它如何解释路径。
回答标题:您必须提取 cpio,然后用您想要的内容重建它。没有办法只修改现有的 cpio 存档。不过你的问题似乎已经解决了这个问题。
要回答这个关于在文件上创建具有特定文件夹路径的 cpio 的问题,您需要完全匹配原始 cpio 存档指定其包含的文件的方式(您似乎已经弄清楚了该部分)。 cpio 中的所有内容都将被列为
/
,因为 cpio
历史上用于归档整个根文件系统,但这实际上仅意味着归档的根。您需要准确复制您看到的文件夹路径,而不带前导 /
。
要获取文件夹路径
/./folder1/file1
,您需要将其添加为./folder1/file1
。由于 test/
是您放置内容的文件夹,因此请进入 test/
开始。然后,您需要为文件夹下的每个文件添加 ./
前缀,如果您执行 find
,这恰好是 find .
输出的内容。所以命令是:
cd test && find . | cpio -ov -F newArch
您会注意到我添加了
-v
,因此 cpio 将打印它在 stderr 上添加的文件名,允许您像您期望的那样验证以 ./
开头的所有内容,而无需重新提取。