【问题标题】:Shell script to adjust filenames (from the end)用于调整文件名的 Shell 脚本(从最后开始)
【发布时间】:2013-06-29 10:05:39
【问题描述】:

我遇到了一个问题,即如何为更改文件名进行 BATCH 调整。

我所有的文件都是这样的:

1602017EN.MPG 1802312EN.MPG 等等

我需要为所有文件名更改两件事。

我需要将文件扩展名调整为小写,因此它读取的是 .mpg 而不是 .MPG。 对于这一部分,我使用的是苹果自动机服务。这非常有效。

其次,我需要删除最后 2 个字符,即字母。

所以第一项将是 1602017.mpg 等等。

如果可以使用我可以添加到我的自动机服务中的 shell 脚本来完成,那就太完美了,这样它就可以相互更改 no1 和 no2。

非常感谢您!

【问题讨论】:

  • 您想要 Unix shell 脚本还是 Windows 批处理文件?你使用了这两个标签。
  • @Barmar:好问题,但提到 Apple Automator 强烈表明 Windows 不相关(所以我删除了“批处理文件”标签)。
  • @JonathanLeffler 是的,更多的是为了 OP 的利益,让他知道这些东西是相互排斥的。
  • 对不起,我的意思是批处理,就像'让它适用于一堆文件'。不像在 Windows...bleg ;-)

标签: shell filenames


【解决方案1】:

假设您使用bash 编写shell 脚本,您可以使用sed 轻松完成:

for file in "$@"
do
    name=$(echo "$file" | sed 's/[A-Z][A-Z].MPG$/.mpg/')
    mv "$file" "$name"
done

(在文件名中没有换行符的合理假设下工作)。

但是,您也可以直接在bash 中执行此操作,而无需调用外部程序:

$ for file in 1602017EN.MPG 1802312EN.MPG; do echo ${file/[A-Z][A-Z].MPG/.mpg}; done
1602017.mpg
1802312.mpg
$

【讨论】:

  • 请注意"$@"for 的默认值。
  • 是的。我知道。我不在乎;我更喜欢直言不讳。
  • 感谢您的快速回复!这些突击队会调整当前目录中的所有文件吗?因为还有一些.pdf和其他文件,我不想碰那些..
  • 我想我只是通过将第一行更改为 *.MPG 中的文件来解决这个问题
  • 第一个版本适用于命令行中给出的文件名。您可以将"$@" 更改为*.MPG 或将脚本调用为convert_script *.MPG。就个人而言,我很少编写一个脚本,其中包含硬连线的文件名。我希望将名称作为脚本的参数给出。
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
相关资源
最近更新 更多