만약 내가한다면:
$ ls -R
.:
4Shared/ Cloud/
./4Shared:
UFAIZLV2R7.part3.rar
./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part
파일을 나열하고 싶다면 .rar
다음을 사용합니다.grep.rar.part
, 그것은 또한 내가 원하지 않는 파일을 보여줄 것입니다 .
나는 find
또는 ls **/*.rar
에 설명된 대로 이 문제를 해결하고 있습니다.이 스레드잘 작동하지만 이것이 가능한지 알고 싶습니다 grep
.
나는 다음을 시도했습니다(생각 EOL
):
ls -R | grep ".rar\n"
결과가 없다.
문제는 greping이 발견되었는지 알아내는 것입니다.줄 끝에서, 하지만 잘 모르겠습니다.
여기에 도움이 있나요?
답변1
앵커 포인트는 $
선의 끝과 일치합니다.
ls -R | grep '\.rar$'
find
이 목적 으로 사용할 수도 있습니다 :
find . -name '*.rar'
답변2
귀하의 질문 외에도 .rar
".rar"뿐만 아니라 .
.rar(포함) 이전의 모든 문자 와 일치한다는 점에 유의하세요 rar
. 이 경우에는 문제가 되지 않을 수 있지만 .
정규식에서는 이스케이프 처리해야 합니다.
ls -R | grep "\.rar$"
답변3
grep
단어 경계에서 시작하도록 문자열 검색을 지시할 수도 있습니다 . .
(a) 사이에는 그러한 경계가 있습니다.말이 아닌문자) 및 r
(a단어특징). 구현 에 따라 grep
단어 경계 연산자는 또는 (단어의 왼쪽 경계만) 또는 (오른쪽) \b
일 수도 있습니다.\<
[[:<:]]
\>
[[:>:]]
$ ls -R | grep '\brar$'
예
이 샘플 데이터가 있다고 가정해 보겠습니다.
$ ls -1
afile.rar
xrar
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part2.rar.part
이 명령은 확장자가 .rar
.
$ ls -R | grep '\brar$'
afile.rar
어떻게 작동하나요?
메타 문자
\b
는 캐럿 및 달러 기호와 마찬가지로 앵커입니다. "단어 경계"라는 위치에서 일치합니다. 이 일치 기간은 0입니다.
이것이 작동하지 않는 상황
이러한 이름의 파일이 있으면 blah-rar
해당 파일도 감지됩니다.
$ ls -R | grep '\brar$'
afile-rar
afile.rar
영숫자 이외의 문자는 일반적으로 경계 문자로 간주되어 이 방법에서는 건너뛰기 때문입니다.
답변4
그냥 해:
ls -1R -I"?" -I"??" -I"???" -I"*[!.][!r][!a][!r]"
grep
전혀 그럴 필요가 없습니다.
노트:위의 방법은 작동하지만... 여전히 발생합니다.적어도 afile-rar
이유를 모르겠습니다. 여기에 남겨두겠지만 자랑스럽진 않습니다. 어쨌든 다른 사람들이 말했듯이 :
find . '*.rar'