파일 이름에서 특정 문자열을 제거하는 방법은 무엇입니까? [복사]

파일 이름에서 특정 문자열을 제거하는 방법은 무엇입니까? [복사]

다음 디렉토리에 여러 파일이 있습니다./var/lib/jenkins/bin/

-rwxr-xr-x. 1 root root 4430846 Apr 27 09:45 01-DSP-04.12_03_crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:45 01-FL4-04.12_02-crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:45 01-FL8-04.12_02-crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:46 01-FPGA-04.12_02-crc.bin
-rwxr-xr-x. 1 root root  524328 Apr 27 09:46 01-MMI-04.11_05-crc.bin
-rwxr-xr-x. 1 root root   27692 Apr 27 09:46 01-PIC-04.11_06-crc.bin

또한 /var/lib/jenkins/scripts/my_script.sh.

이 스크립트의 파일 이름에서 앞에 오는 "01-"을 제거하고 싶습니다. 이를 수행할 수 있는 좋은 방법이 있습니까?

나는 다음 해결책을 시도했습니다.https://stackoverflow.com/questions/28305134/remove-first-n-character-from-bunch-of-file-names-with-cut하지만 나에게는 작동하지 않습니다.

나는 다음과 같은 결과를 얻습니다.

주문하다

$ for file in /var/lib/jenkins/bin/*; do echo mv $file `echo $file | cut -c4-`; done

산출

mv /var/lib/jenkins/bin/01-DSP-04.12_03_crc.bin r/lib/jenkins/bin/01-DSP-04.12_03_crc.bin
mv /var/lib/jenkins/bin/test.sh r/lib/jenkins/bin/test.sh

보시다시피 파일 이름이 아닌 디렉터리 이름인 처음 3자를 제거합니다. 파일 이름에서 21자 뒤의 3자를 제거하고 싶습니다.

이를 수행하는 더 좋은 방법이 있습니까?

답변1

문제는 전체 경로를 사용하고 있으므로 디렉터리를 포함한다는 것입니다. 가장 간단한 해결책은 먼저 cd대상 디렉터리로 이동한 다음 for루프를 실행하는 것입니다.

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "$(echo "$file" | cut -c4-)"; done

또는 쉘 자체를 사용하십시오.문자열 연산능력:

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "${file#????}"; done

또는 perl-rename( renameDebian 기반 시스템 또는 perl-rename기타 시스템에서 호출됨)이 있는 경우 다음을 수행할 수 있습니다.

rename -n 's|.*/...||' /var/lib/jenkins/bin/*

유효한 것으로 확인되면 삭제하여 -n실제로 이름을 바꾸세요.


그러나 Sundeep이 댓글에서 지적했듯이 단순히 제거하려면 01-구체적으로 삭제하십시오.

rename -n 's|.*/01-||' /var/lib/jenkins/bin/*

관련 정보