![.gitignore와 같은 패턴에 해당하는 모든 파일을 찾는 방법](https://linux55.com/image/204039/.gitignore%EC%99%80%20%EA%B0%99%EC%9D%80%20%ED%8C%A8%ED%84%B4%EC%97%90%20%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
예를 들어. 와 같은 파일이 있습니다 .myignore
. 해당 파일에는 다음과 같은 문자열이 있습니다.
.vs/
*.suo
*.user
*.log
그런 다음 file 의 패턴과 일치하는 모든 파일을 찾고 싶습니다 .myignore
.
답변1
존재하다 zsh
:
() {print -rC1 -- ${(u)@}} ${~^${(f)"$(<.gitignore)"}}(ND)
어디:
() {body} args
매개변수가 포함된 익명 함수 호출입니다.print -rC1 -- ${(u)@}
함수 본문으로서 열에print
고유한 인수를 표시합니다 (플래그는 중복 항목을 제거함). 이러한 파일/디렉토리를 삭제하려면 로 바꾸십시오.r
1
C
u
u
print -rC1
rm -rf
"$(<.gitignore)"
.gitignore
후행 개행 문자(있는 경우)를 제외한 내용으로 확장됩니다. 따옴표는 IFS 분할을 방지하기 위한 것입니다.${(f)param}
매개변수 확장을 줄 번호f
(개행이라고도 함)로 분할합니다.${~param}
결과 단어의 와일드카드를 허용합니다.${^array}text
rc 또는 fish와 같은 방식으로 배열을 확장합니다. 예를 들어 가$array
포함된 경우 대신 으로 확장됩니다 .A
B
Atext
Btext
A
Btext
(ND)
숨겨진 파일을 건너뛰지 않고 일치 실패로 인해 오류가 발생하지 않도록 한정자를[N]ullglob
추가 합니다 .[D]otglob
답변2
줄 바꿈으로 설정된 배열을 사용하십시오 IFS
.
# save IFS variable
OLD_IFS=$IFS
# Set IFS to newline only
IFS=$'\n'
# Expand the files to an array.
files=($(<.myignore))
# reset IFS to old value
IFS=$OLD_IFS
# delete your files (remove the echo if the output is ok)
# ... or do other stuff
echo rm -f "${files[@]}"
답변3
간단히 명령 대체를 통해 쉘 확장을 허용할 수 있습니다.
echo $(cat .myignore)
ls -ld $(cat .myignore)
rm -rf $(cat .myignore)