【发布时间】:2014-09-15 23:35:14
【问题描述】:
背景
我经常在 Mac OS X 上使用tar 命令,主要是因为我严重依赖find 和“LaunchBar”。
LaunchBar 是由键盘命令调用的应用程序启动器。按命令空间( configurable )并弹出一个小窗口。开始输入 app、file、command、shell 脚本、AppleScript 等,按回车键,命令被调用。
LaunchBar 创建所有文件的索引,以便快速访问整个文件系统以及其他一些特定于应用程序的细节,例如:移动文件、复制文件,调整文件大小,播放歌曲,跳过歌曲,添加提醒/笔记,google 搜索,与整个操作系统紧密集成,附加文本,有趣的是,您可以创建.tgz 文件。
当我完成一个项目后,我不再希望它出现在我的索引中 — 我可以打开索引并排除该项目出现在 LaunchBar 中,这可行,但 LaunchBar 努力隐藏自己和它的应用程序包 (.app ),甚至更难以隐藏 搜索索引管理器。足够频繁的操作和太多的精神记忆开销,加上在索引中定位文件是我经常做的事情,而不是自动化过程。
我已经养成使用tar 归档已完成项目的习惯。我在同一命令中将g 标志用于gzip 和tar 文件。
在tar 参数中使用前导破折号的官方立场是什么?我已经看到它以三种方式完成:没有前导破折号,前导破折号,前导破折号,每个参数单独使用。
我的命令
tar cvfz "project.tgz" "project"`; mv "project" ~/.Trash
我 mv 将原始文件放在 ~/.Trash 中,而不是 rm'ing 它们,以防 tar 失败或我需要在最后一刻进行更改。
我有一个脚本可以找到所有超过 2 周的 .tgz 文件和 rm 的文件,因为那时我还没有碰过它们,并且觉得删除它们是安全的。 (*我不使用操作系统提供的“Empty Trash”,而是根据文件 age 和 extension 选择性地删除文件(rm)
我有一个多级备份系统。 (现场和远程)我不会在 LaunchBar Index/Preferences 上浪费大量时间——LaunchBar 的索引变化足够频繁手动排除已完成的项目是不可行的。 LaunchBar 的 优势在于它能够极快地从索引中添加和删除,所有这些都只需不到 3MB 的内存开销。
问题/问题
当我解压其中一个tar 档案时,结果与预期不符。如果一个项目位于:
/Users/me/Documents/Jobs/GitHub/In-Progress/Project-Name 我创建了一个名为“cats.tgz”的tar 文件,我通过双击该文件来解压该文件——OS X 有一个可以解压的本机应用程序。 tar、gzip、zip 等等,在维护文件元数据的同时,最终的结果是一个名为“cats”的目录。
打开那个目录我看到tar 已经创建了一个完整的空目录树回到根驱动器。所以“cats”一经解压,就变成了一个目录结构:
/Volumes/drive-name/Users/me/Documents/Jobs/GitHub/In-Progress/Project-Name/cats/all-my-cats-files.
除了它的父目录之外,每个目录都是空的,否则tar 命令将花费大量时间来打包“me”、“Documents”和“In-Progress”目录。
好像有一个:
mkdir -P /Volumes/drive-name/Users/me/Documents/Jobs/GitHub/In-Progress/Project-Name/cats
…在tar 命令之前运行的命令,源指向项目名称,目标指向一长串空目录。
我很少在我多年来解压的数千个 tar、tgz、zip 和其他压缩/组合档案中看到这个。
如果您想以特定方式解压缩档案以维护目录路径结构,我可以看到这很方便 - 也许对于您项目中使用的文件,某些文件和目录可能需要位于特定位置.例如:您的项目代码中的调用可以找到 ~/bin/some-command,但路径将是错误的,因为 root ( / ) 现在只是我的“In-Progress 中的目录中的一个目录em>”目录。
结论和结语
我错过了一面旗帜吗?我的tar 命令中是否存在需要或不需要的尾部斜杠?
- 这是对 MarkDown (.md) 的极少数冒险之一,出于某种原因……可能是我在移动设备上输入的,我没有看到 MarkDown 的预览-> 呈现 HTML 显示。
难倒……tar 的普通用户有什么建议吗?我的直觉告诉我不要一次性使用gzip 命令可能会解决这个问题。而是将其设为tar 的两部分过程,完成后调用gzip 来完成操作。我看不到它是gzip,因为它只接受一个参数,即文件名,并对其进行压缩。 压缩侵略性有一个标志,但我一直只坚持默认值。
【问题讨论】:
-
这些名称通常存在于 tar 本身中,并且通常应该都在一个目录中以防止 tar 轰炸您的 cd...如果您使用 @987654356,您可以在不扩展的情况下查看名称@开关
-
@Scott- 我不禁觉得你有点冗长。通常最好陈述您的问题并提出您的问题。我害怕这样的谩骂,我只是忽略了它们。
-
那么,您究竟想如何解决这个问题?您想知道如何创建不包含所有这些元素的档案吗?您想知道如何在 unpack 上抑制前导目录元素吗? (后者需要 GNU 扩展)。准确地决定你想知道什么,然后只问那个问题。简洁。在适当的论坛中(“我如何使用这个标准的 UNIX 命令?”通常比 StackOverflow 更适合 SuperUser)。
-
同意jww。在我们可以期望阅读它之前,这应该更短。不是我们懒惰;看看类似的问题,看看他们是如何在大约 1/4 的空间中提出这一点的。