Linux에는 리터럴 "스크랩"이 포함된 많은 파일과 디렉터리가 포함된 파일이 있습니다. ls *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
것 같아이것당신이 찾고있는 대답입니다. 게시물에서는 특정 항목만 표시되는 이유가 글로벌 확장이라고 설명합니다.