Bash 过滤掉具有给定扩展名的文件
Bash filter out files with a given extension
我已经在 运行 Rubocop 中添加了一个预提交挂钩,以防止正在准备提交的任何文件。但是,当您给它一个 .png 或 .svg 文件时,Rubocop 会出错。我已将这些文件扩展名添加到 .rubocop.yml
中的 exclude
块中,但因为我实际上是按名称明确提供文件,这似乎并不能解决问题。
这是我的预提交脚本:
#!/usr/bin/env bash
set -e
git diff --staged --diff-filter=d --name-only | xargs bundle exec rubocop
我认为该方法是从 git 命令中获取文件列表并循环遍历它们,过滤掉所有 .png 或 .svg 文件,但老实说我不知道该怎么做.关于按扩展名过滤文件的任何建议?
一个想法可能是使用 grep
.
过滤掉这些扩展名
git diff --staged --diff-filter=d --name-only \
| grep --invert-match '\.\(png\|svg\)$' \
| xargs bundle exec rubocop
有一个标志 --only-recognized-file-types
我认为它可以满足您的需要。
git diff --staged --diff-filter=d --name-only -- ':!*.png' ':!*.svg'
或者为了更容易控制,您可以在 .gitattributes
.
中检查属性并设置匹配
说 git help glossary
并搜索 pathspec
,可能有更快捷的途径来找到它的文档,但我知道的就是这个。
我已经在 运行 Rubocop 中添加了一个预提交挂钩,以防止正在准备提交的任何文件。但是,当您给它一个 .png 或 .svg 文件时,Rubocop 会出错。我已将这些文件扩展名添加到 .rubocop.yml
中的 exclude
块中,但因为我实际上是按名称明确提供文件,这似乎并不能解决问题。
这是我的预提交脚本:
#!/usr/bin/env bash
set -e
git diff --staged --diff-filter=d --name-only | xargs bundle exec rubocop
我认为该方法是从 git 命令中获取文件列表并循环遍历它们,过滤掉所有 .png 或 .svg 文件,但老实说我不知道该怎么做.关于按扩展名过滤文件的任何建议?
一个想法可能是使用 grep
.
git diff --staged --diff-filter=d --name-only \
| grep --invert-match '\.\(png\|svg\)$' \
| xargs bundle exec rubocop
有一个标志 --only-recognized-file-types
我认为它可以满足您的需要。
git diff --staged --diff-filter=d --name-only -- ':!*.png' ':!*.svg'
或者为了更容易控制,您可以在 .gitattributes
.
说 git help glossary
并搜索 pathspec
,可能有更快捷的途径来找到它的文档,但我知道的就是这个。