如何修剪文件夹中多个文件的文件名

如何修剪文件夹中多个文件的文件名

我有一个包含一堆 png 图像文件的文件夹。我需要修剪文件名以从末尾删除一些信息。

例如

some file-170227-222746.png
some other file-170228-222742.png
another file-170226-222743.png

我需要删除 - 之后的所有内容,同时保留 .png 扩展名,最终得到:

some file.png
some other file.png
another file.png

所有文件都是png图像文件,我不需要保留原始文件。

我试过这个,它有效,但做了错误的事情,因为它删除了 .png 扩展名

for file in *.png; do
  mv -- "$file" "$(file%%.png"
done

可以修改上面的 mv 命令来执行我需要的操作吗?我应该使用不同的方法吗?

谢谢

答案1

你的方法走在正确的轨道上,只需要一些准确性。你可以这样做:

for file in ./*.png; do  mv  "$file"  "${file%%-*}.png";  done

答案2

如果您有权访问 perl 脚本,rename您也可以使用

rename -n 's/(.*).{14}(\.png)/$1$2/' *

测试后删除-n以实际重命名文件。

笔记

  • -n打印将要更改的内容,实际上不执行任何操作
  • s/old/newold用。。。来代替new
  • (.*)保存此位置的所有字符供以后使用
  • .{14}正好 14 个字符
  • (\.png)节省.png
  • $1$2打印第一个保存的图案和第二个保存的图案

答案3

感谢大家的帮助。

我最好的解决方案是:

for file in ./*.png; do  
mv  "$file"  "${file%%-17*}.png";  done

注意-17。这避免了当文件在我需要修剪的区域之前有一个早期破折号时被修剪过多的问题。

例如

some file-name-170227-222746.png

被修剪为:

some file-name.png

代替:

some file.png

相关内容