하위 디렉토리 및 해당 디렉토리의 내용을 나열하지 않고 디렉토리에 파일 나열


24

동일한 디렉토리에있는 하위 디렉토리를 나열하지 않고 디렉토리의 모든 파일 목록을 작성하고 해당 목록을 새 파일로 인쇄하려고합니다.

ls -d * > filelist

현재 디렉토리에있는 모든 파일의 목록을 작성하지만 현재 디렉토리에있는 서브 디렉토리도 나열합니다. 옵션을 find사용 하여 명령을 시도했지만 -maxdepth 1찾기는 파일 이름과 함께 경로를 인쇄하기 때문에 출력 형식에 문제가 있습니다.

누구든지 디렉토리에있는 파일의 출력 목록을 생성하고 하위 디렉토리의 이름이나 내용이 아닌 다른 명령이나 옵션을 알려주십시오.


2
ls -d *숨겨진 폴더 / 폴더를 제외하고 현재 폴더의 파일과 폴더 만 나열하는 것이 혼란 스럽 습니다.
GM-Script-Writer-62850

예,하지만 해당 디렉토리의 폴더를 나열하지 않고 해당 디렉토리의 파일 만 나열하고자합니다.
janet

답변:


22

찾기 기반 솔루션 :

find . -maxdepth 1 -type f -printf '%f\n'

배쉬 기반 솔루션 :

for f in *; do [[ -d "$f" ]] || echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -d "$f" ]] || ls -- "$f"; done

bash 기반 솔루션은 디렉토리가 아닌 모든 것을 제공합니다. 명명 된 파이프와 같은 것들이 포함될 것입니다 (아마도 이것을 원할 것입니다). files 만 구체적으로 원한다면 find명령 또는 다음 중 하나를 사용하십시오 .

for f in *; do [[ -f "$f" ]] && echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -f "$f" ]] && ls -- "$f"; done

이것을 정기적으로 사용하려는 경우 물론 이것을 어딘가에 별칭으로 넣을 수 있습니다 ~/.bashrc.

alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'

의견에서 당신이 실제로 Ubuntu가 아닌 OSX에 있다고 언급 했으므로 다음에 Apple 또는 더 일반적인 Unix & Linux Stack Exchange 사이트에 질문을 할 것을 제안합니다 .


1
숨겨진 파일을 포함할지 여부에 따라 이러한 솔루션이 올바른지 확인하십시오.
케빈 휠러

10

파일 이름 만 나열 :

1. ls -p | grep -v / (숨겨진 파일없이)
 2. ls -l | grep ^-| tr -s ''| cut -d ''-f 9 (숨겨진 파일없이)

 a) ls -pa | grep -v / (숨겨진 파일 포함)
 b) ls -la | grep ^-| tr -s ''| -d ''-f 잘라 내기 (숨김 파일 포함)

디렉토리 만 나열하십시오.

1. ls -p | grep / (숨김없이)
 2. ls -l | grep ^ d | tr -s ''| 컷 -d ''-f 9 (숨겨지지 않은 상태)

 a) ls -pa | grep / (숨겨진 상태)
 b) ls -l | grep ^ d | tr -s ''| 컷 -d ''-f 9 (숨김)

grep -v -e ^ $는 결과에서 빈 줄을 제거하는 것입니다.

자세한 내용 :
ls -p 플래그는 디렉토리 이름 끝에 '/'를 넣고, -R 플래그는 재귀 검색을 위해 -l은 정보로 나열하는 경우 -l, 정보가 포함 된 모든 (숨겨진 파일 포함)을 나열하는 경우-gre -v 플래그는 결과 반전을위한 것이고 -e 플래그는 정규식 일치를위한 것입니다.


7

일반 파일 만 나열하려면

ls -al | grep ^-

심볼릭 링크 포함 :

ls -al | grep ^[-l]

목록의 첫 번째 문자가 파일 유형을 설명하므로 -기호 링크의 경우 일반 파일임을 의미합니다 l.

데비안 / 우분투

일치하는 모든 파일 (링크 포함)의 이름을 인쇄하십시오.

run-parts --list --regex . .

절대 경로로 :

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

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

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

5

또 다른 해결책, 순전히 짧은 해결책은 나를 위해 일했습니다.

ls -la | grep -E '^[^d]' > files

나를 위해 완벽합니다ls -alR |grep -E '^-'
여기

4

find를 사용하고 필요한 경우 출력에서 ​​디렉토리 이름을 제거하는 것이 좋습니다.

find . -type f -maxdepth 1 | sed s,^./,,

2
-maxdepth 1필터 앞에 와야 sed하며 -printf옵션 과 함께 사용하지 않고도이 결과를 얻을 수 있습니다 find . -maxdepth 1 -type f -printf '%f\n'.
evilsoup

3
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist

또 다른 가능한 옵션은

ls -F | grep -v '/' | sed /[@*]$// > filelist

--file-type폴더 (뿐만 아니라 심볼릭 링크. 끝에 @의 끝 부분에두고 /는 The grep -v '/'그들이 지금로 끝나는 때문에 (서브 디렉토리를 제거하는 '/'). sed s/@$//제거됩니다 라인 당 @. -1 인쇄는 하나 개의 파일 grep -v가 올바르게 작동합니다.


당신의 응답을 주셔서 감사합니다. 불행히도, 그것은 나를 위해 작동하지 않습니다, 아마도 내가 잘못 실행하고 있습니다. 내가 준 정확한 명령을 사용하면 다음과 같은 오류가 발생합니다. ls : 잘못된 옵션--사용법 : ls [-ABCFGHLPRSTWabcdefghiklmnopqrstuwx1] [file ...] 대신 * 와일드 카드 문자를 사용해 보았습니다. --file-type과 함께 사용하십시오. 당신이 명확히 할 수 있다면 나는 그것을 감사하겠습니다!
janet

이 명령은 나를 위해 작동합니다 (13.04 실행), 어떤 버전의 우분투를 사용하고 있습니까?; -1grep하는 것은 중요하지 않습니다. 당신은 숨겨진 파일이 사용 포함하려는 경우 -a에 옵션ls
-62850 GM-스크립트 작가

사실, 저는 맥에서 일하고 있습니다. 아마도 mac OS X 또는 Unix에서 명령이 약간 다릅니 까?
janet

1
시도해 볼 수도 있습니다ls -F | grep -v '/' | sed s/[@*]$// > filelist
Dr.Tower
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.