2012-04-11 47 views
0

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

+0

我迷路了,你能举一个你想要完成的例子吗? – Freddy 2012-04-11 16:46:11

+2

@tripleee你确实观察到2012年有人问这个问题,并且在2013年提出了你声称重复的问题,对吧?我的意思是,你*确实*认为要检查日期,以免引起时代错误并破坏空间连续体。 – 2015-06-30 06:25:15

+18

@CharlieMartin感谢提问。我没有注意到,没有;但问题的年龄是次要问题。不管问题的年龄如何,对问题和/或多个好答案的更好阐述的问题是作为“重复”目标的更好选择;而当两个问题都比较陈旧时,尤其是两者中的较新者更加规范。 – tripleee 2015-06-30 06:44:22

回答

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 

您可以使用目录名(1)

由于宏年初展开,你可以简单地构建变量的命令行和扩大他们获取路径的一部分。其中op和NP是你的路径名

command < $op > $np 

有一个可爱的在线书,覆盖此多的bash Advanced Scripting Guide

+0

http://mywiki.wooledge.org/DontReadLinesWithFor显然,'cat'是[无用的](http://www.iki.fi/era/unix/award.html)。 – tripleee 2015-06-30 04:26:05

+0

另请参阅http://wiki.bash-hackers.org/scripting/tutoriallist#rv_abs关于ABS指南的一些(非常温和的)注意事项。共识是,它不应该成为您的脚本建议的第一站。链接页面推荐一些其他教程(向后滚动几个凹槽)。 – tripleee 2015-06-30 04:27:49

+3

也许后续元:http://meta.stackoverflow.com/questions/298192/disagreement-on-duplication-action – tripleee 2015-06-30 06:42:59

相关问题