Linux에는 "scrap"이라는 텍스트가 포함된 많은 파일과 디렉터리가 포함된 파일이 있습니다. ls *scrap*
아무 문제없이 입력하면 볼 수 있습니다 . 그러나 이는 제외하려는 텍스트 "scrap"이 포함된 디렉터리도 반환합니다.
ls | grep ".*scrap.*"
or를 사용해 보았 ls | grep scrap
으나 이는 디렉토리만 반환합니다(일반 파일은 아님).
왜 그럴까요?
다음 단계는 (대리인이 올바른 출력을 반환한 후) 해당 출력에서 디렉터리를 제거하는 것입니다. 이를 수행하는 방법에 대한 제안도 환영합니다!
답변1
실제로 현재 디렉토리(첫 번째 수준)의 이름에 포함된 모든 일반 파일을 나열하려면 +가 scrap
필요하지 않습니다 .ls
grep
노인과 함께 지내세요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
~인 것 같다이것당신이 찾고있는 대답입니다. 기사에서는 특정 콘텐츠만 보여주는 이유로 글로벌 확장을 언급하고 있습니다.