내 Qnap에서 여러 디렉터리의 파일 이름에서 "xyz"를 "abc"로 바꾸려고 했습니다. 유닉스/리눅스 초보자로서 다음 명령을 시도했습니다.
for f in *xyz*; do mv -i "$f" "${f//xyz/abc}"; done
이는 디렉터리의 파일에는 적합하지만 하위 디렉터리의 파일에는 적합하지 않습니다. 하위 디렉터리의 파일에서도 작동하도록 위의 내용을 어떻게 변경할 수 있습니까?
답변1
의견에서 논의한 것처럼 OP는 bash
QNAP 장치에서 쉘을 사용하지만 Bash 3이므로 Bash 4.0에 추가되었으므로 globstar를 사용할 수 없습니다. 이 경우 find
가능한 해결 방법 중 하나입니다.
예:
먼저 샘플 디렉터리 구조를 만들고XYZ문서:
$ mkdir -p 1/2/3
$ touch a_xyz_a 1/2/b_xyz_b 1/2/3/c_xyz_c
이제 find
+를 실행하세요 mv
:
$ find . -name "*xyz*" -exec sh -c 'echo mv -i "$1" "${1//xyz/abc}";' sh {} \;
mv -i ./a_xyz_a ./a_abc_a
mv -i ./1/2/3/c_xyz_c ./1/2/3/c_abc_c
mv -i ./1/2/b_xyz_b ./1/2/b_abc_b
echo
실제로 실행하려면 삭제하세요 mv
.