중첩된 디렉터리에서 대상 폴더로 파일을 이동하되 기본 이름을 유지하고 폴더 구조를 삭제하시겠습니까?

중첩된 디렉터리에서 대상 폴더로 파일을 이동하되 기본 이름을 유지하고 폴더 구조를 삭제하시겠습니까?
find $(MY_DIR)/source -type f -name "*.wav3" -print0 | \
xargs -0 -P $(NPROC) -n1 -I {} \
mv {} $(MY_DIR)/sound/{}.wav

위에서 모든 .wav3 파일을 찾아서 사운드 폴더로 이동하려고 시도했지만 기본 이름을 유지하기 위해 출력 파일을 자르는 방법을 잘 모르겠습니다.

$(MY_DIR)/source/deeply/nested/file/song1.wav3

$(MY_DIR)/source/deeply/nested/file/song2.mp3.wav3

다음으로 이동됩니다:

$(MY_DIR)/sound/song1.wav

$(MY_DIR)/sound/song2.wav

스크립트를 어떻게 조정할 수 있나요?

답변1

find++를 망칠 필요 없이 xargs그냥 mv전환해서 zsh실행하면 됩니다.

autoload -U zmv
zmv -n '$(MY_DIR)/source/**/(*).wav3' '$(MY_DIR)/source/${1%%.*}.wav'

작동 방식:

  • 먼저 zmv로드합니다.autoload
  • -n인수는 실행을 방지하는 것입니다. 결과가 만족스러우면 이 옵션을 제거하세요.
  • 이중 별표는 **모든 중첩 디렉터리와 일치합니다.
  • (*)무엇이든 일치시키고 결과를 $1변수 에 저장
  • ${1%%.*}첫 번째 점 뒤의 모든 후속 문자를 삭제합니다.
  • .wav마지막으로 확장 추가

관련 정보