폴더 또는 서브 파일이 아닌 한 폴더의 모든 파일을 나열하려면 어떻게해야합니까? 즉, 파일 만 나열하려면 어떻게해야합니까?
폴더 또는 서브 파일이 아닌 한 폴더의 모든 파일을 나열하려면 어떻게해야합니까? 즉, 파일 만 나열하려면 어떻게해야합니까?
답변:
사용 find
:
find . -maxdepth 1 -type f
이 -maxdepth 1
옵션을 사용하면 현재 디렉토리 (또는를 .
일부 경로로 바꾸면 해당 디렉토리) 만 볼 수 있습니다. 해당 및 하위 디렉토리에있는 모든 파일의 전체 재귀 목록을 원하면 해당 옵션을 제거하십시오.
find
Mac에서는 -type
이나 -maxdepth
옵션 이 없습니다 .
-type
그리고 정상적인 의미에서 옵션-maxdepth
이 아닙니다 . BSD (OS X에서 사용됨)는이를 기본 이라고 부르며 파일 이름 피연산자 ( 이 경우 ) 뒤에 와야합니다 . Linux와 달리 BSD 버전에는 하나 이상의 명시적인 파일 이름 피연산자가 필요합니다. 이 답변의 명령은 확실히 Mac에서 작동합니다. find
.
find *.png -maxdepth 0 -type f
방지하기 위해 ./
출력 파일 이름에 접두사를, 또한주의 -maxdepth
의 0
하지를 1
)만큼 당신이 필요로하는 모든 파일이기 때문에 이름 의 알파벳 순서 . ls
다른 방법으로 할 수있는 작업 (다른 출력 형식 / 순서, 숨겨진 항목 포함 여부에 대한 인라인 제어) 을 원한다면 [다중] 유형 필터링으로 보완하면 제 답변의 스크립트가 도움이 될 수 있습니다.
find * -maxdepth 0 -type f
과 대조하기 위해 (@AlexHall의 주석에서 파생 된 대안) find . -maxdepth 1 -type f
: find . ...
항상 숨겨진 항목을 포함하고 항상 출력 파일 이름 앞에를 붙이고 ./
GNU find
(Linux)에서는 일반적으로 정렬되지 않은 목록을 출력합니다. find * ...
, 쉘이 앞쪽으로 globbing을 수행 하도록하기 때문에 기본적으로 숨겨진 항목 (으로 변경 가능)을 제외하고 shopt -s dotglob
알파벳순으로 정렬 된 단순한 파일 이름 (접두사 없음)을 출력합니다. 두 방법 모두 파일에 대한 심볼릭 링크를 포함하지 않습니다 . -L
그렇게 하려면 옵션 을 사용하십시오 .
carlpett의 find
기반 답변 ( find . -maxdepth 1 -type f
)은 원칙적으로 작동하지만 다음을 사용하는 것과 완전히 동일하지는 않습니다 ls
. 모든 접두사가 붙은 잠재적으로 정렬되지 않은 파일 이름 목록 을 얻고 의 많은 옵션 을 적용 할 수있는 기능을 잃게됩니다./
ls
.
또한 find
항상 숨겨진 항목도 찾는 반면 ls
'동작은 -a
또는 -A
옵션의 유무에 따라 달라집니다 .
개선 제안, 알렉스 홀 질문에 단 댓글에서는 것입니다 결합 쉘 대체 (globbing)을 함께find
:
find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
ls
다른 많은 정렬 / 출력 형식 옵션에 액세스 할 수 없습니다 .Hans Roggeman의 ls
+ grep
대답 은 실용적이지만 long ( -l
) 출력 형식 을 사용하도록 잠급니다 .
내가 쓴 이러한 한계를 해결하기 위해 fls
( f를 iltering LS 유틸리티) ,
ls
제공하는 동시에 유형 필터링 기능 을 제공하는 유틸리티 ,f
d
l
ls
fls --help
fls --man
예 :
fls f # list all files in current dir.
fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first
fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)
지원되는 플랫폼
참고 : Node.js를 사용하지 않더라도 패키지 관리자 npm
인은 여러 플랫폼에서 작동하며 설치가 쉽습니다. 시험
curl -L https://git.io/n-install | bash
와 Node.js를가 설치되어 다음과 같이 설치합니다 :
[sudo] npm install fls -g
참고 :
필요한지 여부는 sudo
Node.js / io.js를 설치 한 방법과 나중에 권한을 변경 했는지 여부에 따라 다릅니다 . 당신이 얻을 경우 EACCES
오류를 다시 시도하십시오 sudo
.
는 -g
보장 글로벌 설치를 넣어하는 데 필요한 fls
시스템의에 $PATH
.
bash
스크립트 등을 fls
.chmod +x fls
.$PATH
와 같은 에서 폴더로 이동하거나 심볼릭 링크합니다 ./usr/local/bin
/usr/bin
-1
(1 번); ls
실제로 기본값은 "bare"출력, 즉 파일 이름 만이지만 터미널에 출력 할 때는 열 기반 레이아웃 (한 줄에 여러 파일 이름)을 사용합니다. 출력 줄당 하나의 파일 이름을 얻으려면 ( dir /b
메모리가 제공되는 경우 수행되는 작업) -1
옵션을 사용합니다.이 옵션은 실제로 파이프 나 출력 파일로 보낼 때와 같이 stdout이 터미널에 연결 되지 않은 경우에 암시 적으로 설정됩니다 .
ls
샘플을 위해 옵션을 사용하는 것을 좋아합니다 .
-l
긴 목록 형식 사용-t
수정 시간별로 정렬, 최신 항목부터-r
정렬하는 동안 역순-F
, 항목에--classify
표시기 (* / => @ | 중 하나 ) 추가-h
,--human-readable
-l 및 -s와 함께 1K 234M 2G 등과 같은 인쇄 크기 ...
언젠가 --color
다른 모든. (참조 ls --help
)
파일, 심볼릭 링크, 장치, 파이프, 소켓 등이 표시됩니다.
그래서
find /some/path -maxdepth 1 ! -type d
날짜별로 쉽게 정렬 할 수 있습니다.
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
또는
find /some/path -maxdepth 1 -type f
크기별로 정렬 :
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
이름이 점으로 시작하는 숨겨진 항목을 표시하지 않으려면 다음을 추가 할 수 있습니다 ! -name '.*'
.
find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
그때
당신은 대체 할 수있는 /some/path
가 .
에 대한 목록 현재 디렉토리 나 ..
에 대한 상위 디렉토리 .
당신은 또한 사용할 수 ls
와 함께 grep
또는 egrep
및 별칭으로 프로필에 넣어 :
ls -l | egrep -v '^d'
ls -l | grep -v '^d'
파일 찾기 : ls -l / home | grep "^-"| tr -s ''| 잘라 내기 -d ''-f 9
디렉토리 찾기 : ls -l / home | grep "^ d"| tr -s ''| 컷 -d ''-f 9
링크 찾기 : ls -l / home | grep "^ l"| tr -s ''| 잘라 내기 -d ''-f 9
tr -s ''는 출력을 공백으로 구분 된 파일로 변환합니다. cut 명령은 구분자가 공백이라고 말하고 9 번째 필드 (항상 파일 이름 / 디렉토리 이름 / 링크 이름)를 반환합니다.
나는 이것을 항상 사용한다!
carlpett의 대답에 추가하십시오. 훨씬 유용한 파일보기를 위해 출력을 ls로 파이프 할 수 있습니다.
find . -maxdepth 1 -type f|ls -lt|less
가장 최근에 수정 된 파일을 목록 형식으로 표시합니다. 많은 파일을 다운로드하고 최근 파일의 정리되지 않은 버전을보고 싶을 때 매우 유용합니다.
ls
표준 입력을 읽지 않으므로 ls
. 놓쳤 xargs
나요?
find
이 대답 의 명령은 완전히 무시됩니다 . 전체 명령은 유형 필터링 ls -lt | less
을 수행 하지 않는와 동일 합니다.
find
하면 find . -maxdepth 1 -type f -ls
. 내가 생각하지만 그것은 또한 맥 OS에서 작동하는 것 같다 -maxdepth
및 -ls
제대로 휴대용 옵션이 없습니다.