【问题标题】:Looping through certain files in a folder and running command on them while and also change the file name [duplicate]循环浏览文件夹中的某些文件并对它们运行命令,同时更改文件名[重复]
【发布时间】:2017-09-07 12:53:56
【问题描述】:

这里是初学者。我想编写一个用于 bash 终端的简单脚本,但我不知道如何制作。要点是我有一个文件夹,里面装满了不同的文件,一些 .foo,一些 .bar 等。我想创建一个脚本来获取所有 .foo 文件并对它们执行命令,但在同一行重命名它们这样输出文件就被命名为file.baz。

例如: 命令 -i file.foo -o file.baz 用于目录中的所有 .foo 文件。

【问题讨论】:

    标签: bash terminal


    【解决方案1】:

    重命名

    您可以使用rename 命令:

    $ rename .foo .baz *.foo
    

    请注意,在某些系统上,rename 指向使用不同语法的 prename

    $ prename 's/.foo$/.baz' *.foo
    

    使用man rename 找出您拥有哪一个。

    循环文件并在每个文件上运行命令

    您可以直接在命令行上提供文件列表,使用globbing pattern

    $ your_script *.foo
    

    然后您的脚本可以像这样遍历列表(使用您的命令的用法):

    for file in "$@"; do
        your_command -i "$file" -o "${file%.*}.baz"
    done
    

    ${file%.*} 解析为不带扩展名的文件名 (file.foo -> file)。有关字符串操作的更多信息,请访问here

    【讨论】:

    • for command in "$@",当然,我的错。我不知道command 内置,会研究它,谢谢
    • 看起来不错。我唯一可以添加的是关于如何同时生成输出文件名的指针,即。 for file in *.foo; do your_command -i "$file" -o "${file%.foo}.baz"; done 之类的。
    猜你喜欢
    • 2017-07-10
    • 1970-01-01
    • 2010-12-20
    • 2020-09-15
    • 2017-09-16
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多