여러 파일 확장자로 끝나는 모든 파일을 나열하시겠습니까?

여러 파일 확장자로 끝나는 모든 파일을 나열하시겠습니까?

내가 알고 있는 내용으로 끝나는 파일을 원할 경우 .fas다음 명령을 사용하면 됩니다 ls.

ls -l /users/jenna/bio/*.fas

이것은 로 끝나는 모든 파일을 나열합니다 . 그러나 또는로 끝나는 파일을 .fas어떻게 얻을 수 있습니까 ?.fas.pep

ls -l /users/jenna/bio/(*.fas | *.pep)작동하지 않는 것 같나요? 이 작업을 수행할 수 있는 다른 명령이 있다는 것을 알고 있지만 이를 작동시킬 수 있는 방법이 있습니까 ls?

도와주셔서 감사합니다!

답변1

이것을 사용하십시오 : ls -l /users/jenna/bio/*.{fas,pep}

아니면 이거: find /users/jenna/bio -iname '*.pep' -or -iname '*.fas'

답변2

기본적으로 작동할 가능성이 가장 높은 것은 다음과 같습니다.버팀대 확장. bash, zsh 및 ksh와 함께 작동합니다.

ls -l /users/jenna/bio/*.{fas,pep}

(중괄호 주위에는 공백이 없습니다.)

Bash 및 ksh에서는 확장자 중 하나가 일치하지 않으면 오류가 표시되지만 다른 확장자와 일치하는 파일은 계속 나열됩니다. 그 이유는 중괄호 확장이 와일드카드 일치 기능이 아니라 텍스트 대체: 쉘이 패턴과 일치하는 파일 찾기를 시작하기 전에로 변환되기 때문입니다 *.{fas,pep}. *.fas *.pepzsh에서는 오류가 발생하고 명령이 실행되지 않지만 더 나은 방법이 있습니다: "또는"글로벌 모드. 일치하는 확장자가 없으면 오류가 발생하지 않습니다.

ls -l /users/jenna/bio/*.(fas|pep)

아니면 패턴을 사용할 수도 있습니다다른 구문: @(…|…);Bash에서는 활성화 구문을 사용해야 하고 shopt -s extglob, zsh에서는 활성화 구문을 사용해야 합니다 setopt ksh_glob.

ls -l /users/jenna/bio/*.@(fas|pep)

(이 동작 중 일부는 구성 가능합니다. 명시적으로 지정하지 않는 한 모든 설명은 셸의 기본 구성에 적용됩니다.)

답변3

find일반적으로 또는에서 발생하는 성가신 오류 없이 반복적으로 스캔하려는 경우 ls(예: "허가가 거부되었습니다","디렉토리가 아님")는 스크립트나 xargs명령을 차단할 수 있으며 tree해당 명령은 여기서 언급되지 않습니다.

tree -fai / | grep -e ".fas$" -e ".pep$"

위에서는 root 를 사용했지만 /어떤 경로든 가능합니다.

tree -fai /users/jenna/bio/ |  grep -e ".fas$" -e ".pep$""

그런데

관련 정보