내 프로젝트 디렉터리를 보고 싶지만 find
Git에서 추적하는 파일만 찾고 싶습니다. find
Git이 추적하는 파일로만 결과를 제한하기 위해 출력 필터(또는 다른 방법)로 사용할 수 있는 명령이 있습니까 ?
예:
find . -name '*.postinst' | git-no-untracked
위의 나의 용도는 무엇입니까 git-no-untracked
?
답변1
zsh
전환 옵션이 제공 되면 다음 목록을 얻을 수 있습니다.추적 파일배열에서:
tracked_files=(${(0)"$(git ls-files -z)"})
그런 다음 관심 있는 파일 목록의 교차 작업을 수행합니다. 예를 들면 다음과 같습니다.
postinst_files=(**/*.postinst)
tracked_postinst_files=(${postinst_files:*tracked_files})
zsh glob 으로 할 수 있는 대부분의 작업을 수행할 수 있습니다 find
. 예를 들어 지난 2시간 동안 마지막으로 수정된 일반 파일만 원하는 경우:
postinst_files=(**/*.postinst(.mh-2))
또는 추적 파일 목록에서 직접 패턴을 검색할 수 있습니다.
tracked_postinst_files=(${(M)tracked_files:#*.postinst})
또는 파일이 추적된 파일 목록에 있는지 확인하기 위해 glob 한정자 함수를 정의합니다.
istracked() ((${tracked_files[(Ie)${1-$REPLY}]}))
tracked_postinst_files=(**/*.postinst(+istracked))
답변2
사용 팁에 따라 git ls-files
명령을 실행하고 comm
. 미묘한 점은 comm
입력을 정렬해야 하며 행이 정확히 텍스트와 일치해야 한다는 것입니다(따라서 ./
일반적인 find
명령과 같은 접두사가 없을 수 있음).
#!/bin/bash
set -eu
usage()
{
cat <<EOF
Usage:
$0 cmd [args... ]
Runs _cmd_ (with arguments, if provided) and filter the output to
files currently tracked by Git.
Example:
$0 find . -name README -mmin -60
EOF
}
trap 'usage >&2' ERR
case "${1:-}" in
-h|--help|'-?')
usage
exit 0
;;
'')
usage >&2
exit 1
;;
esac
exec comm -12 \
<("$@" | xargs -d '\n' -n 1 realpath -s --relative-to=. | sort) \
<(git ls-files | sort)
답변3
이건 어때:
find . -name '*.postinst' | xargs -I something bash -c 'git ls-files | grep $(basename something)'