如何创建具有自定义结构的cpio存档

问题描述 投票:0回答:2

我的 cpio 存档只有一个文件 -

/./folder1/file1

我的目标是用另一个替代

file1

我将 cpio 存档解压到文件夹

/test
并替换
file1

我的结构:

/test/folder1/file1

我用这个命令创建了新的存档:

find ./test | cpio -o -F newArch

但是在

newArch
中,我的文件存储为
/folder1/file1

如何获得具有结构的档案

/./folder1/file1

linux archive
2个回答
0
投票

cpio 没有任何前缀命令,尽管我仍然认为这是一个没有实际意义的练习,但您可以尝试它是否保留通过标准输入获取的文件名:

find ./test -printf "././%f\n"| cpio -o -F newArch

根据需要调整格式字符串的前缀。我没有 7zip 来测试它如何解释路径。


0
投票

回答标题:您必须提取 cpio,然后用您想要的内容重建它。没有办法只修改现有的 cpio 存档。不过你的问题似乎已经解决了这个问题。

要回答这个关于在文件上创建具有特定文件夹路径的 cpio 的问题,您需要完全匹配原始 cpio 存档指定其包含的文件的方式(您似乎已经弄清楚了该部分)。 cpio 中的所有内容都将被列为

/
,因为
cpio
历史上用于归档整个根文件系统,但这实际上仅意味着归档的根。您需要准确复制您看到的文件夹路径,而不带前导
/

要获取文件夹路径

/./folder1/file1
,您需要将其添加为
./folder1/file1
。由于
test/
是您放置内容的文件夹,因此请进入
test/
开始。然后,您需要为文件夹下的每个文件添加
./
前缀,如果您执行
find
,这恰好是
find .
输出的内容。所以命令是:

cd test && find . | cpio -ov -F newArch

您会注意到我添加了

-v
,因此 cpio 将打印它在 stderr 上添加的文件名,允许您像您期望的那样验证以
./
开头的所有内容,而无需重新提取。

© www.soinside.com 2019 - 2024. All rights reserved.