在stdin上的文件列表上执行bash命令,并将stdout重定向到相关文件

时间:2012-04-11 16:41:38

标签: bash shell

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

1 个答案:

答案 0 :(得分:4)

好的,假设列表不是太长,你可以从

开始
  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涵盖了这本书以及更多内容。