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

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

Linux에는 리터럴 "스크랩"이 포함된 많은 파일과 디렉터리가 포함된 파일이 있습니다. ls *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

것 같아이것당신이 찾고있는 대답입니다. 게시물에서는 특정 항목만 표시되는 이유가 글로벌 확장이라고 설명합니다.

관련 정보