【问题标题】:create executing a command with a sequence of files as the input, comma separated创建以一系列文件作为输入执行命令,逗号分隔
【发布时间】:2015-03-09 19:44:18
【问题描述】:

原谅我,这可能是一个简单的操作,但我来自面向对象的编程语言,这在 unix/bash/terminal 中不是很直观。

假设我想执行一个文件列表的命令,file1,file2,file3 所以命令会读取

cmd -i file1,file2,file3

现在,假设我有 1000 个这样的文件。我想通过所有文件运行它。然而。如果我只是输入

cmd -i file{1..1000}

我收到一个错误。这是因为file{1..1000} 返回的列表看起来像

file1 file2 file3 file4....

我需要它返回 文件1,文件2,文件3,文件4,....

【问题讨论】:

  • 重写命令以期望文件名作为单独的参数,因此显而易见。命令行上以逗号分隔的列表绝对是“不自然的”,因为很难做到正确(不必要的困难,尤其是当您只需要剖析程序内部的名称时)。
  • 我同意。如果我写了命令,我会这样做。不幸的是,它是为一组特定的生物信息学分析开发的独立命令包。

标签: bash unix terminal


【解决方案1】:

你可以在这里使用printf

cmd -i $(printf "%s," file{1..999})file1000

【讨论】:

  • 效果很好,是提供的最简单/最直接的代码!
【解决方案2】:

如果您真的必须这样做(请参阅我的评论:您应该重写代码以使您的生活更轻松),那么:

cmd -i $(echo file{1..1000} | tr ' ' ',')

echo 生成的文件名用空格分隔; tr 命令将嵌入的空格映射为逗号。

但您确实需要重写您的命令,以便将每个文件名作为单独的参数。

【讨论】:

    【解决方案3】:

    使用 bash 内置函数:

    printf -v string "file%s," {1..1000}
    cmd -i  ${string%,*}
    

    【讨论】:

    • 嗯; printf-v string 选项很有趣。
    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 2022-12-28
    • 2021-01-12
    • 2015-01-06
    • 2015-05-23
    • 2014-03-18
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多