我经常在Mac OS X上使用tar
命令,主要是因为我非常依赖find
和" LaunchBar "。
LaunchBar 是由键盘命令调用的应用程序启动器。按命令空间(可配置),弹出一个小窗口。开始键入应用,文件,命令, shell脚本, AppleScript <的前几个字符/ em>等,按回车键,调用该命令。
LaunchBar 创建所有文件的索引,以便快速访问整个文件系统以及其他一些特定于应用程序的细节,例如:移动文件, copy文件,调整文件大小,播放歌曲,跳过歌曲,添加提醒/备注,谷歌搜索,与整个操作系统紧密集成,附加文本,有趣的是,您可以创建.tgz
个文件。
当我完成一个项目时,我不再希望它在我的索引中 - 我可以打开索引并排除该项目显示在 LaunchBar 中,但是 LaunchBar 努力隐藏自己及其应用程序包( .app ),甚至更难隐藏搜索索引管理器。足够的是操作太频繁而且心理记忆开销过多,加上在索引中定位文件是我经常做的事情,不能自动化该过程。
我养成了使用tar
归档已完成项目的习惯。我在同一命令中使用g
标志gzip
和tar
文件。
在tar
论证中使用领先短划线的官方立场是什么?我看到它有三种方式: no leading dash , 引导破折号,引导破折号,每个参数单独使用。
tar cvfz "project.tgz" "project"`; mv "project" ~/.Trash
我mv
原始文件在〜/ .Trash与rm
中的情况下tar
失败或我需要做最后一分钟的更改。
我有一个脚本可以查找超过2周的所有.tgz
个文件以及rm
个文件,因为那时我还没有触及它们并且觉得删除它们是安全的。 (*我没有使用&#34;清空垃圾桶&#34;由操作系统提供,但根据文件年龄和选择性删除文件(rm
)扩展)
我有一个多级备份系统。 (现场和远程)我不会在 LaunchBar索引/首选项 - LaunchBar 的索引更改中浪费大量时间通常,手动排除已完成的项目是不可行的。 LaunchBar 的优势在于它能够非常快速地添加和删除索引,所有这些都具有3MB以下的内存开销。
当我解压其中一个tar
档案时,结果不符合预期。如果项目住在:
/Users/me/Documents/Jobs/GitHub/In-Progress/Project-Name
我创建了一个名为&#34; cats.tgz &#34;的tar
文件。我通过双击文件解压缩 - OS X有一个可以解压缩的本机应用程序。 tar
,gzip
,zip
以及其他许多人,在维护文件元数据时,最终结果是名为&#34; cats &#的目录34 ;.
打开该目录,我看到tar
已将空目录的整个目录树创建回根驱动器。所以&#34; cats &#34;,一旦解压缩,就会变成以下目录结构:
/Volumes/drive-name/Users/me/Documents/Jobs/GitHub/In-Progress/Project-Name/cats/all-my-cats-files.
每个目录都是空的,除了它的父目录,它必须是,或tar
命令将花费相当多的时间来收拾&#34; 我&#34;,&#34; 文件&#34;和&#34; 正在进行中&#34;目录。
好像那是:
mkdir -P /Volumes/drive-name/Users/me/Documents/Jobs/GitHub/In-Progress/Project-Name/cats
...在tar
命令之前运行的命令,源指向项目名称,目标指向空目录的长目录树。
我很少很少在成千上万的{{1}},tar
,tgz
以及我已解压缩的其他压缩/组合档案中看到此内容这些年。
如果您想以特定的方式解压缩归档以维护目录路径结构,我可以看到这很方便 - 可能使用项目中使用的文件,某些文件和目录可能需要位于特定位置。例如:项目代码中的调用可以找到〜/ bin / some-command,但是路径是错误的,因为root(/)现在只是我&#34; In-中目录内的一个目录。进度&#34;目录。
我错过了一面旗帜吗?是否需要或不需要在我的zip
命令中使用尾部斜杠?
难倒... tar
的任何常规用户都有任何建议吗?我的直觉告诉我,不能一次性使用tar
命令可以解决这个问题。而是将它作为gzip
的两部分过程,在完成调用tar
时完成操作。我无法看到它是gzip
因为它只接受一个参数,文件名并压缩它。 压缩侵略性有一个标志,但我总是只坚持默认值。
答案 0 :(得分:1)
Mac OS X和GNU tar:
在解压缩/解包时删除前导目录级别(及其内容):
tar --strip-components=10 -xvzf "project.tgz"
答案 1 :(得分:0)
我想我想通了,你需要cd
进入你要tar
目录的目录,那么它只是一个单独的目录,当解压缩时,只会你想要什么,所以:
#!/bin/sh
if [ $# -eq 1 ]; then
dirname=`dirname "$1"`
filename=`basename "$1"`
cd "$dirname"
tar -czf "$filename".tar.gz "$filename"
echo $dirname/$filename.tar.gz
fi
cd "$dirname"
非常重要