![중첩된 디렉터리에서 대상 폴더로 파일을 이동하되 기본 이름을 유지하고 폴더 구조를 삭제하시겠습니까?](https://linux55.com/image/89788/%EC%A4%91%EC%B2%A9%EB%90%9C%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%EC%84%9C%20%EB%8C%80%EC%83%81%20%ED%8F%B4%EB%8D%94%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%90%98%20%EA%B8%B0%EB%B3%B8%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%9C%A0%EC%A7%80%ED%95%98%EA%B3%A0%20%ED%8F%B4%EB%8D%94%20%EA%B5%AC%EC%A1%B0%EB%A5%BC%20%EC%82%AD%EC%A0%9C%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
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
마지막으로 확장 추가