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

Linux 如果文件存在,则在shell中将输出重定向到另一个文件,linux,shell,unix,redirect,Linux,Shell,Unix,Redirect,我使用以下命令将输出重定向到另一个文件 ls -l >>foo.txt 此命令将ls-l的输出附加到foo.txt。如果文件不存在,它将创建一个新文件foo.txt并将输出重定向到new foo.txt 现在是否有任何方法将ls-l的输出重定向/附加到一个文件(如果该文件已经存在)中,并且仅当该文件已经存在时,否则它将不会重定向输出或将放弃该输出 在我的例子中,如果foo.txt已经存在,它将把输出附加到foo.txt,否则它将放弃输出 是否有任何命令可以执行此操作?不知道任何内置

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

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

现在是否有任何方法将
ls-l
的输出重定向/附加到一个文件(如果该文件已经存在)中,并且仅当该文件已经存在时,否则它将不会重定向输出或将放弃该输出

在我的例子中,如果foo.txt已经存在,它将把输出附加到foo.txt,否则它将放弃输出


是否有任何命令可以执行此操作?

不知道任何内置语法可以执行此操作,但类似于以下的操作应该可以:

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

不知道任何内置语法来执行此操作,但类似于以下内容的操作应该可以:

if [ -f foo.txt ] ; then
  out=foo.txt
else
  out=/dev/null
fi
ls -l >> $out
请注意,该操作不是原子操作:可以在检查文件是否存在以及打开文件进行写入之前取消链接该文件


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

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

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

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

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

+为了提到原子性…为了正确使用“它的”和“它的”+为了提到原子性…为了正确使用“它的”和“它的”!