ls, 정규식 및 환경 변수

ls, 정규식 및 환경 변수

쉘을 사용할 때 사용할 수 있도록 비디오 파일의 모든 확장자를 저장하는 환경 변수를 선언하고 싶습니다.

몇 가지를 시도했지만 작동하지 않았습니다. .bash_profile에 다음을 입력하는 경우:

export VIDEOS={mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}

마지막 요소만 필요합니다.

[nbarraille@nbarraille ~]echo $VIDEOS
mpeg

내 .bash_profile에 다음을 입력하는 경우:

export VIDEOS="{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}"

또는

export VIDEOS='{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}'

그런 다음 표시하면 괜찮아 보이지만 ls에서 사용하면 다음과 같이 작동하지 않습니다.

[nbarraille@nbarraille ~] echo $VIDEOS
{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}
[nbarraille@nbarraille ~] ll *.$VIDEOS
ls: cannot access *.{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}: No such file or directory

변수를 사용하지 않고 똑같은 명령을 실행하면 작동합니다.

[nbarraille@nbarraille ~] echo *.{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}
example.avi
example2.mpg

또한 재부팅하면 .bash_profile이 로드되지 않고 $VIDEOS 변수가 비어 있는 것처럼 보입니다. source ~/.bash_profile작동시키려면 하나의 작업을 수행해야 했습니다 (그리고 새 터미널을 열 때마다 다시 작업을 수행해야 했습니다).

어떤 아이디어가 있나요?

감사해요!

답변1

귀하의 명령은 다음으로 확장됩니다.

export VIDEOS=mp4 VIDEOS=wmv VIDEOS=avi VIDEOS=flv VIDEOS=mkv VIDEOS=m4u VIDEOS=mpg VIDEOS=mpeg

다음 명령을 실행하여 무슨 일이 일어나는지 확인하세요.

echo export VIDEOS={mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}

(그것은 알려져있다버팀대 확장)


두 번째 문제는 bash중괄호 확장이 매개변수 확장 이후가 아닌 이전에 발생하므로 솔루션처럼 보이는 모든 것이 혼란스러울 수 있다는 것입니다.

당신은 이것을 해야 합니다:

eval echo \*.$VIDEOS

글을 쓸 때마다 짜증이 난다.

다음과 같은 것은 어떻습니까?

videos() {
    find . -mindepth 1 -maxdepth 1 -type f \
        \( -name "*.mp4" -o -name "*.wmv" -o -name "*.avi" -o \
           -name "*.flv" -o -name "*.mkv" -o -name "*.m4u" -o \
           -name "*.mpg" -o -name "*.mpeg" \)
}

그러면 다음을 수행하는 대신:

ls *.$VIDEOS

이렇게 하세요:

videos

또는 이를 명령에 전달해야 하는 경우:

ls $(videos)

이 부분은 작동합니다:

echo *.{mp4,wmv,avi,flv,mkv,m4u,mpg,mpeg}

.bash_profile작동하지 않는다는 단서가 될 수 있습니다. 예를 들어, 이는 를 사용하고 있음을 의미할 수 있습니다 zsh.

이것이 무엇을 하는지 알려주세요:

echo $0

이렇게 하면 어떤 파일을 넣어야 하는지 알아낼 수 있습니다.

답변2

이를 달성하기 위해 배열을 사용할 수 있습니다. 구문은 약간 달라야 합니다.

export VIDEOS=(.mp4 .wmv .avi .flv .mkv .m4u .mpg .mpeg)

그럼 해

ls ${VIDEOS[*]/./*.}

이름이 로 시작하는 동영상만 나열하려면 foo다음을 수행하세요.

ls ${VIDEOS[*]/./foo*.}

답변3

별칭이나 스크립트는 어떻습니까? :

ls -m *.mp4 *.wmv *.avi *.flv *.mkv *.m4u *.mpg *.mpeg 2>/dev/null

이름을 정하세요 lvd- 글자 수가 적습니다(참고: lv다중 언어 파일 뷰어).

관련 정보