확장자가 여러 개인 파일 복사

확장자가 여러 개인 파일 복사

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

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

cp -v *.txt destination/

다음을 사용하여 모든 것을 복사할 수 있습니다..png작업 디렉토리의 디렉토리 destination:

cp -v *.png destination/

그러나 이러한 명령을 별도의 명령으로 입력하는 것은 시간이 많이 소요됩니다(명령 기록을 사용하더라도).cp그렇다면 다음 패턴을 사용하여 파일을 복사하도록 지시할 수 있는 방법이 있습니까?*.txt 또는모드가 *.png도착했나요 destination? 이상적으로는 두 가지 이상의 모드를 지정할 수 있기를 바랍니다. 예를 들어 cp모든 항목을 복사하도록 지시하는 것과 같습니다.*.txt 또는 *.png 또는 *.jpg파일을 에 저장합니다 destination(예:

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

나는 그것이 가능하다는 것을 안다특정 특정 패턴과 일치하는 파일을 제외하고 작업 디렉터리의 모든 파일을 복사합니다., 하지만 내 작업 디렉토리에는 더 많은 파일 확장자가 포함되어 있으므로아니요나보다 더 많이 따라하고 싶어하다, 그건 고통스러울 거예요.

이에 대해 어떤 생각이 있습니까?

답변1

브레이싱 확장으로 작업이 완료됩니다. man bash그리고 검색하세요 Brace Expansion.

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

편집하다:

OP의 요청과 일관성을 유지하기 위해 위 명령에는 자세한 옵션이 누락되었습니다.

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

답변2

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

그게 다야!

관련 정보