ls | grep 명령은 디렉토리만 표시합니다(파일도 표시해야 하는 경우).

ls | grep 명령은 디렉토리만 표시합니다(파일도 표시해야 하는 경우).

Linux에는 "scrap"이라는 텍스트가 포함된 많은 파일과 디렉터리가 포함된 파일이 있습니다. ls *scrap*아무 문제없이 입력하면 볼 수 있습니다 . 그러나 이는 제외하려는 텍스트 "scrap"이 포함된 디렉터리도 반환합니다.

ls | grep ".*scrap.*"or를 사용해 보았 ls | grep scrap으나 이는 디렉토리만 반환합니다(일반 파일은 아님).

왜 그럴까요?

다음 단계는 (대리인이 올바른 출력을 반환한 후) 해당 출력에서 ​​디렉터리를 제거하는 것입니다. 이를 수행하는 방법에 대한 제안도 환영합니다!

답변1

실제로 현재 디렉토리(첫 번째 수준)의 이름에 포함된 모든 일반 파일을 나열하려면 +가 scrap필요하지 않습니다 .lsgrep

노인과 함께 지내세요find주문하다:

find . -maxdepth 1 -type f -name "*scrap*" -ls

답변2

파일 이름에 공백이나 (더 나쁜) 개행 문자가 포함되어 있으면 ls문제가 발생합니다 . grep하지만 안전한 파일 이름을 사용하면 다음을 수행할 수 있습니다.

ls -l | grep -oP '^-.* \K.*$'
ls -l | sed -n '/^-/s/^.* //p'

하지만 일반적으로 이 방법을 사용해야 합니다 find.

답변3

scrap다음을 포함하는 현재 디렉터리에 있는 디렉터리가 아닌 파일 이름의 경우 zsh:

print -rC1 -- *scrap*(ND^/)

파일 유형이 다음과 같은 경우에는 ls *scrap*(또는 더 정확하게는 ls -- *scrap*) 참고하세요.*scrap*목차, ls그러면 해당 항목이 나열됩니다.콘텐츠( 해당 디렉토리에서 단 하나의 파일로 확장 that-scrap-dir:되지 않는 한 헤더 포함)*scrap*

이런 종류의 파일을 원하신다면목차, ls다른 유형의 파일처럼 이름을 인쇄하려면 다음 옵션을 추가해야 합니다 -d.

ls -d -- *scap*(D^/)

그러나 이를 사용하는 것은 거의 의미가 없습니다. ls이름과 유형으로 파일을 찾는 모든 작업은 호출 시 쉘에 의해 이미 완료되었으므로 ls쉘에 내장된 print또는 printf.

답변4

~인 것 같다이것당신이 찾고있는 대답입니다. 기사에서는 특정 콘텐츠만 보여주는 이유로 글로벌 확장을 언급하고 있습니다.

관련 정보