확장명이 여러 개인 파일 복사


22

여러 개의 확장자를 가진 파일을 단일 대상 디렉토리에 복사하고 싶습니다.

예를 들어 다음 명령을 사용 하여 작업 디렉토리의 모든 .txt 파일을 다음 디렉토리에 복사 할 수 있습니다 destination.

cp -v *.txt destination/

그리고 다음을 사용 하여 작업 디렉토리의 모든 .png 디렉토리를 다음으로 복사 할 수 있습니다 destination.

cp -v *.png destination/

그러나 명령 히스토리를 사용하더라도 이러한 명령을 별도의 명령으로 입력하는 데 시간이 많이 걸립니다. 그래서, 내가 말할 수있는 어떤 방법이 cp패턴 중 하나를 사용하여 파일을 복사 *.txt 또는 패턴 *.png에가 destination? 지시처럼 - 이상적으로, 나는 두 개 이상의 패턴을 지정할 수 있도록하고 싶습니다 cp모든 복사 *.txt 하거나 *.png 또는 *.jpg 파일을 destination예를 들어.

쉘 스크립트를 사용 하여이 모든 것이 가능하다고 확신합니다. bash예를 들어 사용 하고 있습니다.하지만 콘솔에서 더 간단하게 수행 할 수있는 방법이 있습니까? 어떻게 든 중괄호 확장을 사용하여 수행 할 수 있습니까?

나는 할 수 있음을 알고 그 일치하는 특정 지정된 패턴을 제외하고 작업 디렉토리에있는 모든 파일을 복사 ,하지만 내 작업 디렉토리가 나는 것을 훨씬 더 많은 파일 확장자를 포함하고 있기 때문에 하지 않는 나는 것보다 복사 할 고통이 될 것이라고.

이것에 대한 생각이 있습니까?


10
cp -v *.txt *.png destination/?
iruvar

답변:


55

브레이스 확장으로 작업이 완료됩니다. man bash를 검색하십시오 Brace Expansion.

cp *.{txt,jpg,png} destination/

편집하다:

OP의 요청에 따라 위의 명령에 자세한 옵션이 누락되었습니다.

cp -v *.{txt,jpg,png} destination/

2
Windows에서이 작업을 수행 할 수 있습니까?
sergiol

내가 cp data/images/*.{jpg,jpeg,png,mp4} destination/하고 mp4파일이 없으면 No such file or directory스크립트를 손상 시키는 오류가 발생합니다. 누락 된 형식을 여러 확장으로 정상적으로 처리 할 수 ​​있습니까?
BradGreens

1
@BradGreens 의견에 여기에 묻지 말고 새로운 질문을 게시해야합니다. 귀하의 질문에 이미 답변이있을 수도 있습니다. 새로운 질문을 게시하면 답변을 얻을 수있을뿐만 아니라 동일한 도움이 필요한 다른 사람들이 검색 할 수 있습니다.
디모데 마틴

0
for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

작동합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.