如果文件存在,则将shell中的输出重定向到另一个文件

时间:2011-03-13 15:53:52

标签: linux shell unix redirect

我使用以下命令将输出重定向到另一个文件。

ls -l >>foo.txt

此命令会将ls -l的输出附加到foo.txt。如果文件不存在,它将创建一个新文件foo.txt并将输出重定向到新的foo.txt。

现在有没有办法将ls -l的输出重定向/附加到文件中,如果文件已经存在,并且不会重定向输出或丢弃它

对于我的情况,如果foo.txt已经存在,它会将输出附加到foo.txt,否则会丢弃输出。

有没有命令要这样做?

3 个答案:

答案 0 :(得分:4)

ls -l |
    if [ -f "$file" ]
        then cat >> "$file"
        else cat # or whatever you want to do with the output
    fi

请注意,该操作不是原子操作:可以在检查文件存在之后和打开文件之前取消链接文件。

答案 1 :(得分:3)

不知道任何内置语法,但以下内容应该有效:

if [ -f foo.txt ] ; then
  out=foo.txt
else
  out=/dev/null
fi
ls -l >> $out

答案 2 :(得分:3)

在运行foo.txt命令之前测试ls -l >> foo.txt是否存在且是常规文件:

test -f foo.txt && ls -l >> foo.txt