여러 디렉터리에 있는 여러 파일의 문자 바꾸기

여러 디렉터리에 있는 여러 파일의 문자 바꾸기

내 Qnap에서 여러 디렉터리의 파일 이름에서 "xyz"를 "abc"로 바꾸려고 했습니다. 유닉스/리눅스 초보자로서 다음 명령을 시도했습니다.

for f in *xyz*; do mv -i "$f" "${f//xyz/abc}"; done

이는 디렉터리의 파일에는 적합하지만 하위 디렉터리의 파일에는 적합하지 않습니다. 하위 디렉터리의 파일에서도 작동하도록 위의 내용을 어떻게 변경할 수 있습니까?

답변1

의견에서 논의한 것처럼 OP는 bashQNAP 장치에서 쉘을 사용하지만 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.

관련 정보