如果创建存档时文件夹不存在,如何让 tar 创建一个文件夹

如果创建存档时文件夹不存在,如何让 tar 创建一个文件夹

tar 是否有任何选项,在创建存档时,如果目标目录不存在,它会自行创建它?

所以我有文件夹/1/2,但没有文件夹/1/2/3/。我可以使用 tar 的任何选项来实现它吗?

我需要它作为脚本,但如果没有选择,做这样的事情会更好吗?

mkdir /1/2/3/ &> /dev/null

如果该文件夹不存在,则会创建它,但如果它已经存在,我不会收到错误消息,因为我将其全部推入空。

现在用这个方法,有什么可能出错的地方吗?

基本上,我正在制作一个删除用户的脚本,但您可以选择一个选项来在脚本删除用户之前存档其主目录。为了使脚本在其他计算机上可用,我必须创建一个名为 的文件夹/archives,该文件夹在其他计算机上可能存在也可能不存在。

由于 tar 显然无法递归地创建您为存档指定的任何路径(例如,/archives/users如果您写入tar -czf /archives/users/user1.tgz /home/user1/if/archives不存在,则它无法创建。

这让我想到了关于我的解决方案的问题:写作mkdir -p /archives/users/ &> /dev/null。这会搞乱什么吗?请记住,该脚本只能使用 sudo 运行,因为它是一个用户删除脚本。

答案1

Tar 只能组合实际存在的数据。

我认为更顺利的方法是预先检查该目录是否存在。您的方法的问题是,如果无法创建目录,您将不会看到错误消息。

这是一个例子测试:

test ! -d /1/2/3 && mkdir /1/2/3

答案2

默认行为tar是在提取档案时创建丢失的目录。

如果您确实使用cpio而不是tar,则情况有所不同,您需要提供cpio选项-d来告诉它创建丢失的目录。

如果您处于创建模式,则不存在与您的问题相匹配的问题,因为归档不存在的目录是没有意义的。

相关内容