일부 파일 이름을 제외 :찾기 GREP 지금까지 내가 여기까지 입수했습니다 DOS2UNIX
prompt$ find path/to/project -type f | grep -v '*.ori|*.pte|*.uh|*.mna' | xargs dos2unix 2> log.txt
그러나, 확장자를 가진 파일이 .PTE, 뭐해 여전히 표시 .mna, .ori.
일부 파일 이름을 제외 :찾기 GREP 지금까지 내가 여기까지 입수했습니다 DOS2UNIX
prompt$ find path/to/project -type f | grep -v '*.ori|*.pte|*.uh|*.mna' | xargs dos2unix 2> log.txt
그러나, 확장자를 가진 파일이 .PTE, 뭐해 여전히 표시 .mna, .ori.
find
으로 제외하는 것이 좋습니다. Birei의 답변을 참조하십시오.
grep
패턴의 문제점은 쉘 glob로 지정했기 때문입니다. 기본적으로 grep
은 기본 정규식 (BRE)을 첫 번째 인수로 사용합니다. 따라서 grep 패턴을 .*\.\(ori\|pte\|uh\|mna\)$
으로 바꾸면 제대로 작동합니다. 또는 확장 정규 표현식 (ERE)을 사용하려면 -E
을 사용하십시오. 그렇다면 다음과 같은 예외를 표현할 수 있습니다 : .*\.(ori|pte|uh|mna)$
.
전체 명령 줄 :
find . -type f | grep -vE '.*\.(ori|pte|uh|mna)$'
한 가지 방법 :이 작동하지 않았다
find path/to/project *.* -type f ! \(-name '*.ori' -o -name '*.pte' -o -name '*.uh' -o -name '*.mna' \)
| xargs dos2unix 2> log.txt
감사합니다. 나는 "*. *"을 편집했다. – Sassinak
, 내가 왜 궁금해. grep은 "파일 이름 만"하지 않습니까? – Sassinak
@Sassinak : 정확히 어떤 명령을 실행 했습니까? 모든'grep'은'find'에 의해 나열된 파일 이름입니다. 따라서 "파일 이름 만"의존성이 없습니다. 그런데, 당신은 줄의 끝을 일치시키기를 원합니다, 그래서 패턴들은'$'으로 고정되어야합니다, 나는 그 것을 답에 추가 할 것입니다. – Thor
좋아, 변경 사항을 추가하고 완벽하게 작동합니다. 나는 "짧은"이기 때문에 이것을 선호한다. 그러나 위의 대답은 잘 작동했다. 감사! – Sassinak