写入文件,但如果存在则覆盖它

echo "text" >> 'Users/Name/Desktop/TheAccount.txt'

如何使它创建文件,如果它不存在,但覆盖它,如果它已经存在。现在这个脚本只是附加。

410565 次浏览

>>重定向操作符将把行附加到指定文件的末尾,而大于>的单个操作符将为空并覆盖文件。

echo "text" > 'Users/Name/Desktop/TheAccount.txt'

尽管NylonSmile的回答“有点”正确。我无法覆盖文件,以这种方式..

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

解决我的问题…我不得不用…>!, 一个拉 . .

[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"

显然,要小心这个……

#!/bin/bash


cat <<EOF > SampleFile


Put Some text here
Put some text here
Put some text here


EOF

如果你的输出可能有错误,你可能想使用一个&号而且 a大于,如下所示:

my_task &> 'Users/Name/Desktop/task_output.log'这将把stderr和stdout重定向到日志文件(而不仅仅是stdout)。

在Bash中,如果你在set -o noclobber中设置了noclobber,那么你可以使用语法>|

例如:

echo "some text" >| existing_file

如果文件还不存在,也可以这样做


  • 检查noclobber是否设置为:set -o | grep noclobber

  • 有关此特殊类型操作符的更详细说明,请参见这篇文章

  • 有关重定向操作符的更详尽列表,请参阅这篇文章

如果你的环境不允许使用>覆盖,请使用管道|tee,如下所示:

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'

注意,这也将打印到标准输出。如果不需要,你可以将输出重定向到/dev/null,如下所示:

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null

请注意,如果你希望将stderr和stdout重定向到一个文件,同时设置了noclobber(即set -o noclobber),你可以使用以下代码:

cmd >| file.txt 2>&1

更多信息可以在https://stackoverflow.com/a/876242中看到。

此外,这个答案的@TuBui的问题的答案@BrDaHa提供以上在8月9日18日9:34。

要将一个文件的内容覆盖到另一个文件,使用单个大于号,使用两个将追加。

echo  "this is foo" > foobar.txt
cat foobar.txt
> this is foo


echo "this is bar" > foobar.txt
cat foobar.txt
> this is bar
    



echo "this is foo, again" >> foobar.txt
cat foobar.txt
> this is bar
> this is foo, again
    

正如在其他答案中提到的,如果设置了noclobber,则使用>|操作符。