현재 디렉터리의 일반 파일만 나열합니다(디렉터리는 제외).

현재 디렉터리의 일반 파일만 나열합니다(디렉터리는 제외).

이를 사용하여 ls -ld */현재 디렉터리의 모든 디렉터리 항목을 나열할 수 있습니다. 현재 디렉토리의 모든 일반 파일을 나열하는 비슷한 간단한 방법이 있습니까? find를 사용할 수 있다는 걸 알아요

find . -maxdepth 1 -type f

또는 통계

stat -c "%F %n" * | grep "regular file" | cut -d' ' -f 3-

하지만 이 중 어느 것도 지나치게 고급스러워 보이지는 않습니다. 현재 디렉토리의 하위 디렉토리를 나열하지 않고 일반 파일(장치, 파이프 등은 신경 쓰지 않음)만 나열하는 멋진 짧은 방법이 있습니까? 기호 링크를 나열하는 것도 장점이지만 필수는 아닙니다.

답변1

ls -p | grep -v / 

이 명령은 숨겨지지 않은 모든 파일(일반 파일, 링크,장치 파일, 등. ). 숨겨진 파일도 포함하려면 -A다음 옵션을 추가하세요.ls

모든 파일의 이름에 개행 문자가 없다고 가정합니다. -q옵션을 추가하면 ls인쇄할 수 없는 모든 문자(줄 바꿈 포함)가 로 변환되어 해당 ?문자가 한 줄에 있으므로 grep터미널 인쇄와 같은 줄 기반 유틸리티에 입력하는 데 적합합니다.

답변2

그리고 zsh그리고글로벌 예선다음과 같이 쉽게 직접 표현할 수 있습니다.

echo *(.)

구성에 따라 일반 파일 목록 또는 오류만 반환됩니다.

디렉토리가 아닌 경우:

echo *(^/)

(심볼릭 링크(디렉토리 포함), 명명된 파이프, 장치, 소켓, 게이트 등이 포함됩니다...)

echo *(-.)

일반 파일 및 일반 파일에 대한 심볼릭 링크의 경우.

echo *(-^/)

디렉토리가 아닌 경우 디렉토리에 대한 기호 링크도 없습니다.

또한 D포함하려면 globbing 한정자를 참조하세요.ot 파일(숨겨진 파일), *(D-.)예:

답변3

일반 파일만 나열:

ls -al | grep '^-'

기호 링크(모든 유형의 파일)에는 다음이 포함됩니다.

ls -al | grep '^[-l]'

여기서 목록의 첫 번째 문자는 파일 유형을 설명합니다. 즉, -심볼릭 링크가 이므로 일반 파일임을 의미합니다 l.

데비안/우분투

링크를 포함하여 일치하는 모든 파일의 이름을 인쇄합니다.

run-parts --list --regex . .

절대 경로를 사용하십시오.

run-parts --list --regex . "$PWD"

/etcp다음으로 시작 하고 끝나는 모든 파일의 이름을 인쇄하십시오 d.

run-parts --list --regex '^p.*d$' /etc

답변4

bash-4.2$ ls -F | grep -v '[/@=|]$' | more

ls에 대한 -F 옵션은 *를 실행 파일에, /를 디렉토리에, @를 심볼릭 링크에, =를 소켓에, | FIFO로. 그런 다음 grep을 사용하여 출력에서 ​​비정규 파일 문자를 제외하면 파일이 생성됩니다. 이는 zsh뿐만 아니라 모든 쉘에서 작동합니다.

약점은 다음과 같습니다.

  1. @=이름이 , 또는 로 끝나는 모든 파일은 |제외됩니다(그러나 이름에 해당 문자가 포함된 파일은 실제로 있어서는 안 됩니다).
  2. 이는 일부 시스템(예: 문)의 장치 파일이나 일부 특수 유형의 파일을 제외하지 않습니다.
  3. 실행 파일에 별표를 추가합니다. 이는 출력에서 ​​"*" 문자를 제거하기 위해 sed를 통해 파이핑하여 처리할 수 있습니다.
  4. 파일 이름에 개행 문자가 포함되어 있으면 이 방법이 제대로 작동하지 않습니다.

관련 정보