我在以下目录中只有几个文件: /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个字符。
还有更好的方法吗?
问题是您使用的是完整路径,因此包括目录。最简单的解决方法是先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/*
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句