我有一个包含一堆 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/new
old
用。。。来代替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