다음 디렉토리에 파일이 거의 없습니다./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( rename
Debian 기반 시스템, perl-rename
기타 시스템에서 호출됨)이 있는 경우 다음을 수행할 수 있습니다.
rename -n 's|.*/...||' /var/lib/jenkins/bin/*
제대로 작동하는지 확인한 후 을 제거하여 -n
실제로 이름을 바꾸세요.
그러나 Sundeep이 주석에서 지적했듯이 제거만 하려면 01-
다음과 같이 구체적으로 제거하십시오.
rename -n 's|.*/01-||' /var/lib/jenkins/bin/*