편집하다:명확성을 위해 질문이 완전히 다시 작성되었습니다.
나는 디렉토리 트리(새로운) 및 여러 가지 확장 기능이 .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