zsh
일련의 와일드카드 패턴이 포함된 파일을 구문 분석하여 파일 목록을 작성하는 방법을 찾고 있습니다 .
최종 목표는 이 파일 목록을 hg add
Mercurial에 전달하는 것입니다. 이 특정 부분에 관심이 있는 분들을 위해 제가 StackOverflow에서 요청한 또 다른 질문으로 인해 제 질문이 촉발되었습니다.
샘플 파일(이라고 함 .hginclude
)은 다음과 같습니다.
.zshrc
.zprofile
.less*
.emacs*/**
src*/**
.hg*
.bash*
.inputrc
.ssh
스크립트의 출력은 다음과 같아야 합니다.문서출력을 수집하여 획득
print globbing_pattern
각 줄에서 여기서는 globbing_pattern
위 파일의 각 줄을 나타냅니다 .hginclude
.
궁극적으로 파일 목록은 hg add
이러한 파일을 추적하기 위해 Mercurial에 전달할 수 있는 목록이어야 합니다.
이 부분에 대한 가정은 .hgignore
다음과 같습니다.
syntax: glob
*
즉, command 를 통해 명시적으로 추가되지 않는 한 아무것도 추적하지 마세요 hg add
.
답변1
바라보다hg 도움말 모드. Mercurial은 파일에서 파일 이름 읽기를 지원하므로 다음을 수행할 수 있습니다.
$ hg add listfile:myfiles.txt
myfiles.txt
추가할 파일 이름을 포함합니다 . 더 흥미로운 점은 Mercurial의 "파일 이름"이 글로벌 패턴이 될 수 있다는 것입니다. 그래서 당신은 myfiles.txt
포함 할 수 있습니다
.zshrc
.zprofile
glob:.less*
glob:.emacs*/**
잠깐, hg add
위의 명령이 올바른 일을 할 것입니다.
당신은 사용할 수도 있습니다파일 세트문서를 선택하세요. find
유사한 일을 할 수 있게 해주는 유사한 언어 입니다.
set:exec() and not binary()
바이너리가 아닌 실행 파일(예: 스크립트)을 선택하세요.
위의 명령~ 할 것이다파일 .hgignore
은 존중되므로 문제를 해결하는 데 직접 사용할 수 없습니다. 그러나 다음을 사용할 수 있습니다.
$ hg status --all --no-status listfile:myfiles.txt
일반적으로 무시되는 모든 파일을 포함하여 패턴과 일치하는 파일 목록을 가져옵니다. 그런 다음 이 파일 목록을 계속 진행할 수 있습니다 hg add
.
$ hg status -A -n -0 listfile:myfiles.txt | xargs -0 hg add
답변2
이 시도:
hg add `for i in `cat myfiles.txt` ; do ls $i ; done`
myfiles.txt에는 glob이 포함되어 있습니다. 그러나 물론 initpc의 제안이 더 깨끗합니다.