我正在尝试tar在名为“my_directory”的目录中收集文件并使用以下命令删除原件:
tar -cvf files.tar my_directory --remove-files
Run Code Online (Sandbox Code Playgroud)
但是,它仅删除目录中的单个文件,而不删除目录本身(这是我在命令中指定的内容)。我在这里缺少什么?
编辑:
是的,我认为 'remove-files' 选项是相当直白的。虽然我也发现手册页在这一点上不清楚。(在 linux 中,我往往不会真正区分目录和文件,有时会忘记它们不是一回事)。看起来共识是它不会删除目录。
但是,我提出这个问题的主要提示点源于 tar 对绝对路径的处理。因为您必须指定要压缩的文件的相对路径,因此您必须更改到父目录以正确地对其进行 tar。正如我所见,在这种情况下,使用任何类型的后续“rm”命令都有潜在危险。因此,我希望通过让 tar 本身进行删除来简化事情。
例如,想象一个备份脚本,其中要备份的目录(即 tar)作为 shell 变量包含在内。如果该 shell 变量值输入错误,则结果可能是从您上次碰巧所在的任何目录中删除文件。
pav*_*ium 25
由于该--remove-files选项仅删除文件,您可以尝试
tar -cvf files.tar my_directory && rm -R my_directory
Run Code Online (Sandbox Code Playgroud)
以便仅当tar返回退出状态为 0时才删除目录
nik*_*nik 19
您缺少表示该--remove-files选项在将文件添加到存档后删除文件的部分。
您可以使用以下命令执行存档和文件删除操作,
find /path/to/be/archived/ -depth -type d -empty -exec rmdir {} \;
更新:您可能有兴趣阅读关于 Debian 的简短讨论,
错误 424692:--remove-files 抱怨目录“在我们阅读时发生了变化”。
小智 9
您是否尝试在存档名称之后放置 --remove-files 指令?这个对我有用。
tar -cvf files.tar --remove-files my_directory
Run Code Online (Sandbox Code Playgroud)