bash를 사용하여 다른 디렉토리에서 특정 파일을 선택하는 방법은 무엇입니까?

bash를 사용하여 다른 디렉토리에서 특정 파일을 선택하는 방법은 무엇입니까?

다음과 같이 디렉토리에 있는 일부 파일을 나열(또는 삭제 또는 다른 작업 수행)하고 싶습니다.

$ ls /opt/somedir/
aa  bb  cc  aa.txt  bb.txt  cc.txt
$ ls /opt/somedir/(aa|bb|cc)  ## pseudo-bash :p
aa  bb  cc

(디렉토리를 먼저 CD로 이동하지 않고) 이를 달성하려면 어떻게 해야 합니까?

답변1

중괄호를 사용하세요.

ls /opt/somedir/{aa,bb,cc}

더 많은 정보를 원하시면 읽어주세요버팀대 확장.

답변2

bash에서 실행 shopt -s extglob(또는 이것을 당신의 것에 넣으십시오 ~/.bashrc). 다른 것을 사용할 수 있습니다무늬특이한 구문(ksh에서 상속됨)으로 정규식을 제공합니다. 물론 ksh에서도 이러한 모드를 사용할 수 있고, zsh 이후에도 이러한 모드를 사용할 수 있습니다 setopt ksh_glob.

$ shopt -s extglob
$ ls /opt/somedir/@(aa|bb|cc|doesnotexist)
/opt/somedir/aa   /opt/somedir/bb  /opt/somedir/cc

zsh에서는 (foo|bar)패턴으로 직접 사용할 수 있습니다.

% ls /opt/somedir/(aa|bb|cc|doesnotexist)
/opt/somedir/aa   /opt/somedir/bb  /opt/somedir/cc

명령은 전체 경로로 호출됩니다. 짧은 경로를 사용하여 명령을 호출하려면 디렉토리를 어떻게든 변경해야 합니다. 이것이 (cd /opt/somedir && somecommand aa bb cc)가장 쉬운 방법입니다.

답변3

다음을 사용하여 필터링할 수 있습니다 egrep.

ls | egrep '(aa|bb|cc)'

모든 텍스트 파일을 찾으려면:

ls | egrep '(aa|bb|cc).txt'

답변4

먼저 안내해 드리겠습니다.ls를 절대로 구문 분석하지 마세요,한 번. 원하는 작업을 수행하는 정확하고 정식적인 방법은 다음과 같습니다.찾다.

예를 들어:

find /opt/somedir -regex '.*[aa|bb|cc].*' -exec mv '{}' ~/backup \;

나는 일반적 으로 더 간단하기 때문에 -name대신 사용합니다. -regex그러나 정규 표현식은 사용 사례에 적합합니다. 명령을 실행해야합니다아니요 -exec이동/삭제하려는 파일이 맞는지 처음으로 확인하세요.

관련 정보