tar 是否有任何选项,在创建存档时,如果目标目录不存在,它会自行创建它?
所以我有文件夹/1/2
,但我没有文件夹/1/2/3/
。有什么选择可以让 tar 能够做到吗?
我需要它作为脚本,但如果没有选择,做这样的事情会更好吗?
mkdir /1/2/3/ &> /dev/null
如果该文件夹不存在,它将被创建,但如果它已经存在,我将不会收到错误消息,因为我将其全部推入 null。
现在用这种方法,有什么可能出错的吗?
基本上,我正在制作一个删除用户的脚本,但您可以在脚本删除用户之前选择一个选项来归档他们的主目录。为了使脚本在其他机器上可用,我必须创建一个名为 的文件夹/archives
,该文件夹可能存在也可能不存在于其他机器上。
由于 tar 显然无法递归地创建您为存档指定的任何路径(例如,/archives/users
如果您编写tar -czf /archives/users/user1.tgz /home/user1/
if/archives
不存在,它将无法创建。
这让我想到了关于我的解决方案的问题:写作mkdir -p /archives/users/ &> /dev/null
. 这会搞砸什么吗?请记住,此脚本只能使用 sudo 运行,因为它是一个用户删除脚本。
Tar 只能组合实际存在的数据。
如果您事先检查目录是否存在,我认为更顺畅的方法是。您的方法的问题是,如果无法创建目录,您将不会看到错误消息。
这是一个测试示例:
的默认行为
tar
是在提取档案时创建缺失的目录。如果您确实使用
cpio
了而不是tar
,则情况有所不同,您需要提供cpio
选项-d
来告诉它创建缺失的目录。如果您处于创建模式,则没有问题可以匹配您的问题,因为归档不存在的目录是没有意义的。