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

时间:2011-01-13 03:15:37

标签: bash unix

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

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

8 个答案:

答案 0 :(得分:344)

对* nix管道如何工作的一点了解会有所帮助。

简而言之,>>重定向运算符会将行附加到指定文件的末尾,其中 - 大于>的单行将清空并覆盖该文件。

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

答案 1 :(得分:65)

在Bash中,如果您将noclobber设为la set -o noclobber,则使用语法>|

例如:

echo "some text" >| existing_file

如果文件尚不存在,这也适用

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

  • 有关此特殊类型运算符的更详细说明,请参阅this post

  • 有关重定向运算符的详尽列表,请参阅this post

答案 2 :(得分:38)

尽管NylonSmile's answer,这是“有点”正确..我无法以这种方式覆盖文件..

echo "i know about Pipes, girlfriend" > thatAnswer

  

zsh: file exists: thatAnswer

解决我的问题..我必须使用... >!ála ..

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

显然,要小心这个......

答案 3 :(得分:6)

如果您的环境不允许使用>覆盖,请使用管道|tee代替:

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

请注意,这还将打印到标准输出。如果不希望出现这种情况,可以按如下所示将输出重定向到/dev/null

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

答案 4 :(得分:3)

#!/bin/bash

cat <<EOF > SampleFile

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

EOF

答案 5 :(得分:1)

请注意,如果您希望在设置了noclobber的同时(例如set -o noclobber)将std :: cerr和std :: cout都重定向到文件,则可以使用代码:

    cmd >|file.txt 2>&1

有关此问题的更多信息,请访问https://stackoverflow.com/a/876242

这个答案也是@TuBui对@BrDaHa答案的问题,它于{'3}}于18年8月9日9:34提供。

答案 6 :(得分:0)

将一个文件的内容覆盖到另一个文件。例如使用猫。

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

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

现在要覆盖foobar,我们可以使用如下cat命令

cat bar.txt >> foobar.txt
cat foobar.txt

enter image description here

答案 7 :(得分:-2)

如果您的输出可能有错误,您可能需要使用&符号大于,如下所示:

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