파일 이름에서 특정 문자열을 어떻게 제거합니까?

파일 이름에서 특정 문자열을 어떻게 제거합니까?

다음 디렉토리에 파일이 거의 없습니다./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/*

관련 정보