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
来告诉它创建丢失的目录。
如果您处于创建模式,则不存在与您的问题相匹配的问题,因为归档不存在的目录是没有意义的。