`ls`에게 기본 파일 이름 만 인쇄하도록 지시하십시오.


21

이것이 기본 동작입니다 ls

ls /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86/pool/v/vi/virtualenv-1.4.4_linux-x86_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86_64/pool/v/vi/virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/macosx/pool/v/vi/virtualenv-1.4.4_macosx_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/win32-x86/pool/v/vi/virtualenv-1.4.4_win32-x86_2.6_1.pypm

ls기본 이름 만 인쇄하려면 어떻게합니까 ? 처럼:

ls $OPTIONS /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
virtualenv-1.4.4_linux-x86_2.6_1.pypm
virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
virtualenv-1.4.4_macosx_2.6_1.pypm
virtualenv-1.4.4_win32-x86_2.6_1.pypm

참고 : find/ net / nas / data / languages ​​/ pypm / sites / rex / free로 사용하는 것보다 많은 파일과 디렉토리가 포함 된 쉘 글 로빙을 선호합니다 .


1
디렉토리에 많은 파일이있을 때 찾기를 사용하여 쉘 글 로빙을 선호합니까? 오식??
akira

1
OP가 하위 디렉토리 목록을 원하지 않고로 전달하는 옵션을 알지 못하는 -maxdepth 1것 같습니다 find.
직관

답변:


19

반면 xargs -0(같은 \ 0으로 구분 입력에 사용되도록 의도된다 find -print0), ls이러한 방식으로 출력을 분리하는 이러한 옵션이 없다.

하나,

ls -1 /path/glob | tr '\n' '\0' | xargs -0 -n 1 basename

길을 따라 개행을 null로 변환하는 트릭을 수행합니다. 그러면 xargs가 공백이있는 이름으로 작업 할 수 있습니다.

편집 : -n 1xargs에 추가


이것은 나를 위해 작동하지 않습니다 : basename: extra operand \ 033 [0m / net / nas / data / languages ​​/ pypm / sites / rex / free / 2.6 / macosx / pool / v / vi / virtualenv-1.4.4_macosx_2.6_1.pypm \ 033 [ 0m'`
Srid는 Reinstate Monica

@ Sridhar : 당신은 -n 1옵션으로 다른 곳에서 제안한 것이 필요할 수 xargs있습니까? (답변 수정 됨)
Steve Folly

개인적으로 내 답변을 선호하지만 (파일 이름의 공백을 거의 처리 할 필요가 없으므로) 공백을 처리하는 답변으로 표시합니다.
Srid는 Reinstate Monica

xargs의 mac 버전이 -d(구분 기호) 옵션을 지원 하면을 수행 할 수 있습니다 ls ... | xargs -d '\n' -n 1 basename.
직관

12

나는 이것을 사용한다 :

ls | tr '\n' '\n'

다음과 같은 목록을 제공합니다.

file1.mp3
file2.mp3
file3.mp3
...

3
이것은 터미널에 쓰지 않을 때 ls -1ls의미 하기 때문에 본질적으로 동일합니다 (그리고 채색 비활성화) . ls와일드 카드를 사용 하여 경로 인수를 지정할 때 dir 이름을 제거하면 문제가 약간 누락 된 것처럼 보입니다 . 시도 ls -d "$PWD/"* | tr '\n' '\n'실제 문제가 무엇인지 확인합니다.
Daniel Beck

-1 – 왜 사람들이이 답변을 계속지지하는지 잘 모르겠습니다. 뿐만 아니라이 같은 일을 수행 ls -1globs와 사용되었을 때 다니엘 벡이 지적했듯이, 그것은 또한, 작동하지 않습니다.
slhck

-1-와 동일 ls -1하며 경로가 아닌 현재 디렉토리에서만 작동합니다 ls path/*.
Brendan Byrd


4

awk 해결책:

ls -1 /path/glob | awk -F'/' '{print $NF}'

2

ls [선택적 경로] | xargs -0 기본 이름


2
-1 : ls xargs -0는 찾고 있는 \ 0으로 이름을 구분할 수 없습니다 .
Steve Folly


1

당신은 당신이 글러브를 선호한다고 말 find했지만, 둘이 상호 배타적이지 않다는 것을 알고 있습니까? 글 로빙은 단지 당신이 실행하는 어떤 명령에서도 발생합니다 ls. 예를 들면 다음과 같습니다.

$ export BASE=/net/nas/data/languages/pypm/sites/rex/free/2.6

$ echo $BASE/*/pool/v/vi/virtual*1.4.4*pypm | xargs basename
$ ls $BASE/*/pool/v/vi/virtual*1.4.4*pypm | xargs basename
$ find $BASE/*/pool/v/vi/virtual*1.4.4*pypm -print0 | xargs -0 basename

find 예제는 경로에 공백이 포함 된 경우 편리하게 -print0을 사용할 수 있습니다 ( tr다른 곳에서 언급 된 기반 솔루션은 실제 줄 바꿈이 포함 된 파일이 아닌 일반 공간에서는 효과적 임).

마지막으로 GNU find에 액세스 할 수있는 경우 -printf를 사용하여 기본 이름 호출을 완전히 피할 수 있습니다.

$ find $BASE/*/pool/v/vi/virtual*1.4.4*pypm -printf '%f\n'

불행히도, -printfMacOSX 버전의 옵션은 사용할 수 없습니다 find.
Srid는 Reinstate Monica

좋은 전화; 감독에 사과드립니다. 답변을 업데이트했습니다.
라이언 브라이트

-3

파일이 모두있는 디렉토리로 이동하여 입력하십시오.

find *.pypm

1
OP는 자신이 사용하고 싶지 않다고 명시 적으로 선언했습니다 find.
gronostaj

1
또한 이것은 OP가 필요로하는 것을 수행하지도 않습니다. (참고 : find . -name '*pypm'만약 당신이 발견하기 위해 글로브를 두는 것만으로는 아무것도 달성 할 수 없습니다 – 당신은 그냥 쓸 수 있습니다 ls *.pypm.)
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.