bash를 사용하여 다른 디렉토리에서 특정 파일을 어떻게 선택합니까?


13

디렉토리의 특정 파일에 대해 다음과 같이 나열하거나 삭제하거나 다른 작업을 수행하고 싶습니다.

$ 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-ing하지 않고)?

답변:


22

중괄호를 사용하십시오.

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

자세한 정보는 괄호 확장 에 대해 읽으십시오 .


3

bash에서 실행 shopt -s extglob하거나 ()에 넣으면 예외적 인 구문 (ksh에서 상 속됨)으로 정규 표현식을 제공 ~/.bashrc하는 추가 패턴 을 사용할 수 있습니다 . 이러한 패턴을 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), 가장 쉬운 방법입니다.


자세히 보면, 내 질문에 "디렉토리로 cd-ing없이"를 지정한다는 것을 알 수 있습니다.)
neu242

1

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

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

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

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

1
dot은 모든 문자와 일치
하며이

1
ls도 예제 명령이라는 느낌이 들었습니다.
Random832

그렇습니다. 맞습니다. 작업을 수행하고 싶다고 지정했습니다. 파일 나열은 예제 일뿐입니다.
neu242

좋은 의견, 친애하는 친구, 감사합니다. 행운을 빕니다 neu242 : D
Ocean

1

첫째, 나는 당신을 직접 결코 구문 분석 LS , 이제까지 . 원하는 것을 수행하는 적절하고 정식적인 방법은 find 입니다.

예를 들면 다음과 같습니다.

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

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


나는 내가 ls를 파싱한다고 말하지 않았고 Rush는 훨씬 더 나은 대답을했다. 시도해 주셔서 감사합니다 :)
neu242
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.