我正在寻找foo=目录树中的文本文件中的字符串.它在一台普通的Linux机器上,我有bash shell:
grep -ircl "foo=" *
Run Code Online (Sandbox Code Playgroud)
在目录中还有许多匹配"foo ="的二进制文件.由于这些结果不相关并且减慢了搜索速度,我希望grep跳过搜索这些文件(主要是JPEG和PNG图像).我该怎么办?
我知道有--exclude=PATTERN和--include=PATTERN选项,但模式格式是什么?grep的手册页说:
--include=PATTERN Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN Recurse in directories skip file matching PATTERN.
Run Code Online (Sandbox Code Playgroud)
搜索grep include,grep include exclude,grep exclude和variants没有找到任何相关内容
如果有一种更好的方法只在某些文件中进行grepping,我就是全力以赴; 移动违规文件不是一种选择.我不能只搜索某些目录(目录结构很乱,随处可见).另外,我无法安装任何东西,所以我必须使用常用工具(如grep或建议的查找).
假设我想复制目录的内容,不包括名称中包含"音乐"一词的文件和文件夹.
cp [exclude-matches] *Music* /target_directory
Run Code Online (Sandbox Code Playgroud)
什么应该代替[exclude-matches]来实现这个目标?
基本上我想尝试别名:
git files 9fa3
Run Code Online (Sandbox Code Playgroud)
...执行命令:
git diff --name-status 9fa3^ 9fa3
Run Code Online (Sandbox Code Playgroud)
但是git似乎没有将位置参数传递给alias命令.我试过了:
[alias]
files = "!git diff --name-status $1^ $1"
files = "!git diff --name-status {1}^ {1}"
Run Code Online (Sandbox Code Playgroud)
......以及其他一些但不起作用.
退化的情况是:
$ git echo_reverse_these_params a b c d e
e d c b a
Run Code Online (Sandbox Code Playgroud)
......我怎么能做这个工作?
我试图db/irrelevant.php从Git diff中排除一个文件().我试图把在一个文件db名为的子目录.gitattributes与行irrelevant.php -diff
,我也尝试创建一个名为.git/info/attributes包含db/irrelevant.php.
在所有情况下,该db/irrelevant.php文件都作为Git二进制补丁包含在diff中.我想要的是diff命令忽略对该文件的更改.我究竟做错了什么?
我想知道是否有一种简单的方法来扩展Git命令.
所以我可以创建如下命令:
git my-custom-made-extension --my-options <my-other-arguments>
Run Code Online (Sandbox Code Playgroud)
在一个完美的世界里,我可以用它喜欢的任何语言来完成它,并且我能够相当容易地将我定制的扩展添加到任何开发环境中.
比方说,像Vim 插件的支持?