一个衬垫,用于从目录中的文件中删除后缀

时间:2014-04-05 15:43:22

标签: macos bash command-line

在OSX 10.8上,如何通过从名称中删除一定数量的字符来重命名当前目录中的所有文件?例如:

my_img_1@2x.png to become my_img_1.png

因此只会移除@2x部分。

1 个答案:

答案 0 :(得分:3)

执行此操作的确切方法取决于您的文件 - 例如,它们是否都是PNG文件?要从所有这些中删除@2x吗?这是一个循环,它将从当前目录中的所有文件中删除文件扩展名前的3个字符:

for f in *; do
    echo mv "$f" $(sed -r 's/(.*).{3}\.([^\.]+)/\1.\2/' <<< "$f")
done

如果您的所有文件都被命名为[something]@2x.png,并且您希望将它们重命名为[something].png,那么这将有效:

for f in *; do
    echo mv "$f" "${f%@*}.png"
done

这可以使用parameter expansion - 有效地,构造${var%pattern}意味着&#34;取$var并从其末尾删除与[pattern]匹配的最短字符串&#34;。因此,在这种情况下,${f%@*}表示&#34;从@&#34;删除最后$f及其后的任何内容。然后我们附加.png来替换已作为该操作的一部分被删除的文件扩展名。

$f = filename@2x.png
${f%@*} = filename
${f%@*}.png = filename.png