2011-03-13 135 views
1

我正在使用以下命令將輸出重定向到另一個文件。如果文件存在,輸出在shell中重定向到另一個文件

ls -l >>foo.txt 

該命令將輸出ls -l附加到foo.txt。如果文件不存在,它將創建一個新文件foo.txt並將輸出重定向到新的foo.txt。

現在有沒有什麼辦法來重定向/的ls -l輸出追加到一個文件,如果且僅當該文件已經存在,否則將無法輸出重定向或將其丟棄

對於我的情況,如果foo.txt已經存在,它會將輸出附加到foo.txt,否則會丟棄輸出。

是否有任何命令來做到這一點?

回答

3

測試是否foo.txt存在且運行ls -l >> foo.txt命令前的常規文件:

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

不知道任何內置語法做,但像下面應該工作:

if [ -f foo.txt ] ; then 
    out=foo.txt 
else 
    out=/dev/null 
fi 
ls -l >> $out 
4
ls -l | 
    if [ -f "$file" ] 
     then cat >> "$file" 
     else cat # or whatever you want to do with the output 
    fi 

注意,操作不是原子操作:有可能斷開鏈接的文件後,它的存在被檢查並且在它被開放用於書寫之前。

+1

+1提原子...和正確使用「是」和「的」! – 2011-03-14 01:18:39