ファイルリストからプレーンテキストファイルをフィルタリングする方法は?

ファイルリストからプレーンテキストファイルをフィルタリングする方法は?

git openlast最後のコミットを表示し、追加または変更されたファイルのリストを取得し、テキストファイルでのみフィルタリングし、最後にエディタで開くコマンドが必要です。

これまで私は次のことをしました。

git show --stat HEAD
read -p "Open in Vim tabs? (Y/n)" -n 1 -r
if [[ -z $REPLY || $REPLY =~ [Yy] ]]; then
  vim -p $(git diff --diff-filter=AM --ignore-submodules --name-only HEAD^)
fi

欠点は、前のコミットでバイナリを追加または変更すると、エディタ(この場合はVim)でバイナリが開くことです。コマンド出力のリストを取得git diffしてバイナリを削除する方法はありますか?

ベストアンサー1

これをパイプしてバイナリをフィルタリングするためにxargs使用できます。grep -Il ""

git diff --diff-filter=AM --ignore-submodules --name-only HEAD^ | \
  xargs grep -Il ""

git openfilesコマンド例

#!/bin/bash
git show --stat HEAD
files=($(git diff --diff-filter=AM --ignore-submodules --name-only HEAD^ | xargs grep -Il ""))
read -p "Open ${#files[@]} files in Vim tabs? (Y/n)" -n 1 -r
if [[ -z $REPLY || $REPLY =~ [Yy] ]]; then
  exec vim -p ${files[@]}
else
  exit 1
fi

おすすめ記事