对脚本文件的参数中给出的目录中的所有文件运行cat命令,并输出名称作为第二个参数

时间:2014-04-11 15:17:07

标签: linux bash file concatenation cat

我运行以下代码来连接作为bash中脚本文件的参数给出的目录中的文件

for i in $* 
do

    cat $* > /home/christy/Documents/filetest/catted.txt

done

这会产生错误

cat: /home/christy/Documents/filetest/catted.txt: input file is output file

2 个答案:

答案 0 :(得分:1)

你不能cat一个文件回归自己。这就是“输入文件是输出文件”的意思。因为catted.txt显示在cat的参数列表中,所以它会尝试捕捉到它自己。因此,将catted.txt移动到源目录以外的其他位置。

答案 1 :(得分:1)

我认为你的剧本至少有4个问题......

首先,您的循环会将i的值连续设置为每个文件的名称,因此您希望在循环中实际使用i,如下所示:

for i in $*
    cat "$i"  ....somewhere
done

其次,如果您使用>重定向,则每个文件将完全位于前一个的顶部,因此您应该真正使用>>重定向当前文件追加到上一个文件的末尾,如下所示

for i in $*
do
    cat "$i"   >>  ...somewhere
done

第三,我认为你应该使用双引号"$@"来获取所有命令行参数,而不是普通的$*

for i in "$@"
...

第四,使用这个更简单的命令,你可以达到我想要的确切效果:

cat "$@" > /home/christy/Documents/filetest/catted.txt