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

이것이 기본 동작입니다 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로 사용하는 것보다 많은 파일과 디렉토리가 포함 된 쉘 글 로빙을 선호합니다 .



답변

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

하나,

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

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

편집 : -n 1xargs에 추가


답변

나는 이것을 사용한다 :

ls | tr '\n' '\n'

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

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


답변

ls -1 <path> | sed 's#.*/##'


답변

awk 해결책:

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


답변

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


답변

GNU 기본 이름FreeBSD 기본 이름은 모두 -a여러 경로를 명령에 전달할 수 있는 인수를 허용합니다. 이것은 쉘 globbing과 함께 잘 작동합니다.

basename -a /path/glob*


답변

당신은 당신이 글러브를 선호한다고 말 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'