Bash 删除mac os上多个文件的部分名称

Bash 删除mac os上多个文件的部分名称,bash,macos,file-rename,Bash,Macos,File Rename,我有一个满是.pNG文件的目录,文件名中间有一个随机数组,如 T1_021_É}ÉcÉjÉV_solid box.png T1_091_ÉRÉjÉtÉ@Å[_City.png T1_086_ÉnÉiÉ~ÉYÉL_holiday.png 我想这是在移除之后 T1_021_solid box.png T1_091_City.png T1_086_holiday.png 如果这组随机字符在前后都有uu,谢谢 find . -type f -iname "T1_0*" 2>

我有一个满是.pNG文件的目录,文件名中间有一个随机数组,如

T1_021_É}ÉcÉjÉV_solid box.png
T1_091_ÉRÉjÉtÉ@Å[_City.png
T1_086_ÉnÉiÉ~ÉYÉL_holiday.png
我想这是在移除之后

T1_021_solid box.png
T1_091_City.png
T1_086_holiday.png

如果这组随机字符在前后都有uu,谢谢

find . -type f -iname "T1_0*" 2>/dev/null | while read file; do 
    mv "${file}" "$(echo ${file} | cut -d'_' -f1,2,4-)"
done 
说明

  • 查找所有以T1开头的文件_
  • 使用while循环逐行读取列表
  • 使用uu作为分隔符并剪切第三列
  • 使用mv重命名
重命名后的文件名:

T1_021_solid box.png
T1_086_holiday.png
T1_091_City.png

使用
for
收集文件列表和删除子字符串的bash参数扩展,可以在包含文件的目录中执行以下操作:

T1中i的
;做
beg=“${i%\u*\ u*}”##从后面修剪到第二个''
end=“${i###*.}”##从上到下修剪‘’
mv“$i”“${beg}$end”##将mv文件更改为新名称。
完成
注意:您不必使用变量
beg
end
您只需组合这两个参数扩展就可以形成新的文件名,例如
mv“$i”“${i%\\\\\\\\\\\\\\\\\\\\\\\{i\\\\\\\\\\\\\\\\\\\\\\\\\\/code>,但
beg
end
让事情更易读。)

结果

新文件名:

$ls-al T1_*
T1_021_固体
T1_086_holiday.png
T1_091_City.png
这只是从bash开始的另一种方式

使用
cut

您可以使用
cut
删除第三个字段,使用
作为分隔符,并带有:

T1中i的
;做

mv“$i”$(cut-d'-f-2,4-工作起来像个魔咒。感谢您的精彩解释欢迎您,祝您的脚本编写好运!