여러 확장자를 가진 파일을 단일 대상 디렉터리에 복사하고 싶습니다.
예를 들어 다음 명령을 사용하여 모든 항목을 복사할 수 있습니다.. 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
그게 다야!