파일을 기존 디렉터리에 복사하고 이름은 동일하지만 확장자가 다른 기존 파일을 삭제해야 합니다.

파일을 기존 디렉터리에 복사하고 이름은 동일하지만 확장자가 다른 기존 파일을 삭제해야 합니다.

편집하다:명확성을 위해 질문이 완전히 다시 작성되었습니다.

나는 디렉토리 트리(새로운) 및 여러 가지 확장 기능이 .new있습니다. 동일한 트리(오래된) 그 중 다수는 다음과 유사한 이름을 가진 파일을 가지고 있습니다.새로운확장자를 제외한 모든 파일을 .old복사하고 싶습니다..new새로운디렉토리 트리 항목오래된파일이 포함된 디렉토리 트리입니다 .old. 확장자를 가진 파일을 .new쓸 때오래된.old디렉토리 트리에서 이름은 같지만 확장자를 가진 파일을 삭제하고 싶습니다 .

그렇다면 만약에새로운new/foo/bar/file.new디렉토리 트리에는 복사될 이름의 파일이 있습니다 .오래된디렉토리 트리는 파일이 종료 old/foo/bar/file.new되면 old/foo/bar/file.old파일이 삭제됩니다.

편집 #1

이 답변은 아래에서 논의됩니다(관련 없는 배경 정보를 혼란스럽게 하는 오래된 질문을 사용하여). 답변 중 하나로 아래에 공식화한 실제 솔루션을 참조하세요.

답변1

기본적인 방법은 mp3 파일이 포함된 디렉터리에서 실행하는 것입니다.

for i in *.mp3; do cp "$i" /path/to/flac/ && rm path/to/flac/"${i%.*}".flac; done

이름이 로 끝나는 모든 파일을 반복하고 .mp3각 파일을 /path/to/flac/flac 파일이 포함된 디렉터리에 복사한 다음복사가 성공하면, 해당 .flac파일을 삭제하십시오. 비결은 쉘을 사용하는 것입니다.문자열 연산기능을 사용하면 ${i%.*}확장자가 제거되므로 현재 mp3 파일 과 이름은 같지만 확장자는 동일한 파일이 rm ${i%.*}.flac제거됩니다 ..flac

표시하려면:

$ foo='abc.def'
$ echo ${foo%.*}
abc

답변2

이것은 terdons 답변에 대한 의견에서 논의된 최종 답변입니다.

cd new
for i in */*/*.new; do cp "$i" "path/to/old/${i}" && rm "path/to/old/${i//new/old}"; done

관련 정보