我在目录a/b/c.js
我无法忽略c.js
--ignore-file=match:c.js
,因为我想匹配名为c.js
的其他文件
我无法使用a/b
忽略dir --ignore-dir=a/b
,因为 a/b
我试过了:
--ignore-file=a/b/c.js "Invalid filter specification"
我试过了:
--ignore-file=match:/a\/b\/c.js/
不能正常工作,而且我猜测它是因为ack没有将文件路径作为匹配的一部分读取,只是名称。
我试过了:
--ignore-dir=match:/a\/b\/c.js/ " Non-is filters are not yet supported for --ignore-dir (what?)"
我在Ack manual汤中找不到任何有用的东西。如何忽略目录中的文件?
答案 0 :(得分:2)
答案是it is impossible。
答案 1 :(得分:1)
您可以使用find ... ! -path ...
轻松搜索与给定路径匹配的文件 。
此外,find ... -exec ... \{} \+
允许使用附加的文件列表启动命令。
我手边没有ack
,但使用grep
作为占位符,这将导致:
sh$ echo toto > a/b/c.js
sh$ echo toto > a/c.js
sh$ echo toto > a/b/x.js
sh$ find . \! -path './a/b/c.js' -type f -exec grep toto \{} \+
# ^ ^ ^^^^
# pattern should match replace by a call to `ack`
# your search path
./a/c.js:toto
./a/b/x.js:toto
编辑:路径模式开头的./
存在潜在缺陷。
您可能更愿意使用find ... ! -samefile ...
拒绝与给定文件具有相同 inode 的已找到文件:
sh$ find . \! -samefile a/b/c.js -type f -exec grep toto \{} \+
# ^^^^^^^^
# no dot here; this is a *file*
# can't use glob patterns (*, ?, ...)
./a/c.js:toto
./a/b/x.js:toto
来自man find
:
! expr True if expr is false. This character will also usually need protection from interpretation by the shell. -path pattern File name matches shell pattern pattern. The metacharacters do not treat `/' or `.' specially; so, for example, find . -path "./sr*sc" [...] -samefile name File refers to the same inode as name. When -L is in effect, this can include symbolic links.