- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是一个实用程序的作者,它使使用 zip
压缩项目变得更容易一些,尤其是当您必须定期压缩时,例如更新提交到应用程序商店的项目(如 Chrome 的 Web商店)。
我正在尝试进行一些改进,但遇到了一个问题,如下所述。
快速概览
我的实用程序的命令格式类似于 command OPTIONS DEST DIR1 {DIR2 DIR3 DIR4...}
。它通过运行 zip -r DEST.zip DIR1
来工作;一个相当简单的过程。然而,我的实用程序的好处是能够使用预定文件(想想 .gitignore
)来忽略特定文件/目录,或与模式匹配的文件/目录。
这很简单——如果“忽略文件”存在于目标目录(DIR1、DIR2、DIR3 等)中,我的实用程序将向 zip -r DEST.zip DIR1
命令添加排除项使用模式 -x some_file
或 -x some_dir/*
。
问题
然而,我遇到了目录排除问题,我不太明白为什么(这可能是因为我仍然是 sh 新手)。我将举一些例子:
假设我想忽略项目目录中的两件事:.git/*
和 .gitignore
。运行 command foo.zip project_dir
构建以下命令:
zip -r foo.zip project -x project/.git/\* -x project/.gitignore
哇哦!成功!嗯……不完全是。
在此示例中,.gitignore
未添加到压缩输出文件 foo.zip
中。目录 .git/*
及其所有子目录(和文件) 添加到压缩输出文件中。
手动运行命令:
zip -r foo.zip project_dir -x project/.git/\* -x project/.gitignore
当然,按预期工作,所以我很自然地很困惑,为什么我的相同但动态构建的命令不起作用。
尝试的解决方案
我尝试了几种不同的方法来解决这个问题,但都无济于事:
从命令中删除 -x project/.git/\*
,而是在该目录中添加每个子目录和文件,例如 -x project/.git/config -x project/.git/HEAD
等(包括子目录的子目录)
删除星号前的反斜杠,以便命令中生成的排除选项为 -x project/.git/*
焦虑地用头敲键盘(我真的很惊讶这不起作用,它通常会起作用)
一些注意事项
我的实用程序使用 /bin/sh
;我宁愿保持这种方式以获得最大的兼容性。
我知道 git archive
特性——我在上面使用了 .git/*
和 .gitignore
例子只是作为例子;我的实用程序不依赖于 git,也不专门用于 git 存储库的项目。
最佳答案
我怀疑问题出在对生成的命令的评估中,因为您说直接执行时相同的命令是正确的。
正如评论部分所说,我认为您已经找到了正确的解决方案。发生这种情况是因为如果您直接运行该变量,则可以直接扩展诸如 globs 之类的东西,而不是传递给命令。根据情况,论据可能会被搞乱。
是的,在那种情况下:
eval $COMMAND
是要走的路。
关于regex - 动态创建的 'zip' 命令未正确排除目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33879205/
我有一个名为“members”的数据库表。分配给成员的是一个职位。 职位 来自部门。我有 Departments,然后是那些中的 Sub-Departments 和 Sub-Departments 中
我正在尝试为 Solr 搜索应用过滤器标记 Tagging_and_excluding_Filters . 挑战在于同时应用多个标记(对于单个页面上的多个选择选项)。例如 q=mainquery&fq
我知道这个问题已经被问过很多次了,我已经尝试了所有建议,并阅读了有关不同选择器等的所有内容,但没有任何对我有用 给出以下 HTML 片段: link
是否有直接的 LINQ 语法来查找集合 B 中不存在的集合 A 的成员?在 SQL 我会写这个 SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID WHERE B
我试图排除并在现有xpath中包括以下xpath,但不太确定如何做到这一点 //exclude -> //*[@id="ires"]/ol/li[6]/div/a[1]/img //include
我有 30 个站点,我需要在其中 24 个站点上回显某些内容。我怎样才能排除其他人?该代码不起作用,因为我认为它的逻辑是假的:) $currentsite = get_bloginfo('wpurl'
我需要对目标文件夹进行检查,并检查文件是否来自今天,并且超过5kb 下面的命令根据使用今天的日期存在的文件来提供bool值,但是我还要添加-gt5kb之类的排除项 我尝试使用-Exlcude,但不确定
我编入索引的Elasticsearch文档包含许多字段。我一直在使用match_all查询来获取结果。我想从match_all中排除一些字段,这可能吗? 最佳答案 在Elasticsearch中,您可
我正在为我的 DAO 编写一些测试,因为很多测试使用保存到我的数据库中的测试对象,所以我使用注释 @Before 和 @Before 创建了 setup() 和teardown() 方法@After
我编写了一个程序来解决以下问题: Implement a diffusion limited aggregation simulation on a toroid plane where seeds
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
很多时候我必须运行这个查询: select * from users where name is not null and name != '' 有没有更好的方法来做到这一点。我需要更多的性能,任何建
如果检测到某个操作系统,是否有一种简单的方法可以排除某些代码? 我设计了一个运行良好的网站(它是一个 sidescroller),当使用滚轮(向上/向下)时,它会左右滚动。但是,如果您使用的是 Mac
我应该如何排除“IN”子句中的值? $Graduates = "45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,6
很明显,如果一个 Mysql 表的全文索引包含一个出现在 50% 的数据行中的关键字,该关键字将被匹配查询忽略 因此,如果我有一个包含 50 个条目的全文索引“content”的表其中 27 个条目在
我有下面的循环。 我需要提取所有不包含字母 p 的名称 (lskey),但我的尝试不起作用。 for(var i = 0; i "); } } 如果有人能回答,我将不胜感激。 最佳答案 如此接
我正在尝试查找 FTP 服务器上根目录的总大小。但是,我无权访问根目录中的其中一个目录。 我想用这个函数对根目录的大小求和: size = 0 for filename in ftp.nlst("."
我有以下正则表达式来匹配 html 链接: 有点效果。除了不是真的。因为它在 编辑: 这将使它只抓取引号而不是 之后的所有内容 最佳答案 我认为您的正则表达式没有按照您的意愿行事。 这会非贪婪地捕
我在提出异常方面遇到困难,例如: import csv o = open('/home/foo/dummy.csv', 'r') # Empty file! reader = csv.reader(o
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!