最近変更されたファイルのファイル名を返すために git diff を使用しており、返されたファイル名をすべてのファイルを検索し、ファイル名 "-name:" に "*.yml" を含むファイルを返す grep 式にパイプしようとしています。私は実際のファイルにありますが、私のコードはデフォルトでgit diffを無視し、条件に一致するディレクトリ内のすべてのファイルを返すようです。
files=($(git -C ${dir} diff --name-only HEAD^ HEAD | grep -rlw --include="*.yml" --exclude-dir=$excluded_paths-e "- name:"))
どんな助けでも大変感謝します!
答え1
git diff --name-only
grep
理解できる形式でリストを提供する必要があるファイルのリストを生成します。つまりコマンドライン引数として。一つの方法は
git -C "${dir}" diff -z --name-only HEAD^ HEAD | xargs -0 grep -lw --include="*.yml" --exclude-dir="$excluded_paths" -e "- name:"
-z
nullバイトで区切られるようにファイル名を追加しました。このオプションは、-0
xargs
入力に同じ区切り文字を使用することを指定します。再帰検索オプションを削除xargs
しました。これは、確認するファイルの正確なリストを提供するよりも非生産的でした。-r
grep