2011-01-13 64 views
127
echo "text" >> 'Users/Name/Desktop/TheAccount.txt' 

如何使它創建文件,如果它不存在,但覆蓋它,如果它已經存在。現在這個腳本只是附加。寫入文件,但覆蓋它,如果它存在

+0

well..this真棒。我承認>比「更早一點」。 – Jokester 2011-01-13 04:24:19

回答

242

對* nix管道如何工作有一點了解會有所幫助。

簡而言之,>>重定向操作符會將行追加到指定文件的末尾,其中 - 大於>的單個將清空並覆蓋該文件。

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

某些環境不允許使用`-bash:TheAccount.txt:無法覆蓋現有文件`。 – 2017-03-27 07:37:13

+7

另外,`>`和`>>`是*輸出重定向*運算符。管道操作符是`|`。 – 2017-03-27 07:39:54

+0

查看@BrDaHa的答案。使用`> |`強制覆蓋現有的 – Jake 2018-01-16 03:27:10

27

儘管NylonSmile's answer,這是 「之類的」 正確的..我無法覆蓋文件,以這種方式..

echo "i know about Pipes, girlfriend" > thatAnswer

zsh: file exists: thatAnswer

解決我的問題..我不得不使用... >!點菜 ..

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

顯然,要小心對待這個...

+22

這意味着你有非默認的zsh選項`NOCLOBBER`集合。使用`setopt clobber`來恢復默認行爲。 – 2014-05-10 21:08:32

2
#!/bin/bash 

cat <<EOF > SampleFile 

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

EOF 
1

如果你有一個可以有錯誤輸出,您可能需要使用一個符號大於,如下所示:

my_task &> 'Users/Name/Desktop/task_output.log'這會將stderr和stdout重定向到日誌文件(而不是stdout)。

34

在bash中,如果設置了noclobber一拉set -o noclobber,那麼你使用語法>|

例如:

echo "some text" >| existing_file

如果文件不存在

這也適用
  • 檢查了noclobber設置有:set -o | grep noclobber

  • 有關這種特殊類型的操作的詳細說明,請參見this post

  • 重定向運營商的更詳盡的列表,請參閱this post

相關問題