我对 tar 的使用还很陌生,以前曾使用过 zip 文件。
我只想创建不包含目录的 tar 文件。
我去了这里,但发现有点混乱。
https://www.baeldung.com/linux/tar-archive-without-directory-structure
# Backup crontab
crontab -l > /home/andy/bin/crontab_backup.txt
tar -cvf /home/andy/bin/crontab_backup.tar /home/andy/bin/crontab_backup.txt
答案1
对于您的具体示例,如果您在命令中省略该路径,您将获得所需的结果cd
:/home/andy/bin
# Backup crontab
cd /home/andy/bin
crontab -l > crontab_backup.txt
tar -cvf crontab_backup.tar crontab_backup.txt
这是建议3.2 在目标目录中使用 tar 命令在您链接到的页面中,这可能是解决此特定问题的最简单方法。
相当于3.1. 对单个目录使用 -C 选项将会:
crontab -l > /home/andy/bin/crontab_backup.txt
tar -cvf /home/andy/bin/crontab_backup.tar -C /home/andy/bin crontab_backup.txt
链接页面中没有提到另一个选项:--transform
,这使得我们可以使用s/<pattern>/<replacement>/
类似 的表达式sed
。
crontab -l > /home/andy/bin/crontab_backup.txt
tar -cvf /home/andy/bin/crontab_backup.tar /home/andy/bin/crontab_backup.txt --transform 's,.*/,,'
答案2
使用 GNUtar
你可以使用选项-C
在命令过程中更改目录。文件名仍相对于当前目录记录,因此您可以执行以下操作:
tar -cvf /home/andy/bin/crontab_backup.tar -C /home/andy/bin crontab_backup.txt
如果你想从不同的目录收集两个文件,你可以这样做:
tar -cvf /home/andy/bin/crontab_backup.tar -C /home/andy/bin crontab_backup.txt -C /home/andy other_file.txt
答案3
该tar
命令确实没有不存储目录结构的选项,符合linux“做一件事,做好它”的哲学。
这您参考的页面提供了一些技巧来存储没有目录结构的文件。但是,这些技巧的功能非常有限,并且需要您指定包含文件的每个最低级别的目录。如果树中间的目录中也有文件,则该技巧将失败。对这些文件进行 tar 操作将包括较低的目录。
因此,无法完全自动化地完成此操作。更自动化的方法是先在顶层目录中准备一个包含目录树中所有文件的目录,然后对该目录执行 tar 操作。在支持 Linux 权限的文件系统上,可以使用硬链接完成此操作,因此临时副本不需要额外的空间。
你可以这样做find
:
find /path/to/parent/dir -type f -exec ln {} /path/to/new/dir \;
然后您就可以 tar 该目录dir
了/path/to/new
。