【问题标题】:execute a bash command on a list of files on stdin and redirect the stdout to related files [duplicate]在stdin上的文件列表上执行bash命令并将stdout重定向到相关文件[重复]
【发布时间】:2012-04-11 16:41:38
【问题描述】:

我想在文本文件列表上执行 bash 脚本(我猜是使用 for 循环),将 stdout 重定向到与来自 stdin 的文本文件具有相同路径的文件加上扩展名(例如 . txt 或 .sam,或者只是在 stdin 路径的末尾添加一个 ~ 以使其不同)。

【问题讨论】:

  • 我迷路了,你能举一个你想要完成的例子吗?
  • @tripleee 你确实注意到这个问题是在 2012 年提出的,而你声称它重复的问题是在 2013 年提出的,对吧?我的意思是,您确实考虑过检查日期,以免造成不合时宜并破坏时空连续体。
  • @CharlieMartin 感谢您的提问。我没有注意到,没有;但问题的年龄是次要问题。无论问题的年龄如何,具有更好地阐述问题和/或多个良好答案的问题是作为“重复”目标的更好选择;尤其是当这两个问题都是老问题时,这两个问题中较新的问题更规范化并不罕见。

标签: bash shell


【解决方案1】:

好的,假设列表不会太长,你可以开始

  for i in `cat list`
  do
      # do stuff here
  done

如果列表足够长,可能会导致命令行过长,则有一段时间变体

  cat list | while read i
  do
       # do stuff here
  done

您可以使用 basename(1) 构造文件名以摆脱旧的扩展后缀;说 .txt 到 .bak 使用

  `basename .txt ${i}`.bak

您可以使用 dirname(1) 获取路径部分

由于宏扩展较早,您可以简单地在变量中构造命令行并扩展它们。其中 op 和 np 是您的路径名

   command < $op > $np

有一本可爱的在线书籍,bash Advanced Scripting Guide 涵盖了这一点以及更多内容。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-10-11
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
相关资源
最近更新 更多