2015-08-18 139 views
0

比方說,我有1000 txt文件,我必須清空文件內的所有內容,並保留只有1000個沒有內容的文件。 我試圖在shell中使用cat /dev/null > *.txt,但我得到 - bash: *.txt: ambiguous redirect和文件沒有清空。請有任何建議嗎?如何在不刪除文件的情況下清空(刪除全部內容)目錄中的所有文件?

+1

這不是一個代碼編寫的服務;你試過了什麼,究竟是什麼問題呢?如果你甚至沒有選擇一個工具來完成它,你還沒有準備好在這裏提出問題。 – jonrsharpe

+0

@Jonrsharpe:我發佈了我試過的東西,對不起!終於編輯! – Arun

+0

*「但它無法實現」* - 發生了什麼?請給一個[mcve] – jonrsharpe

回答

2

在Python你會寫

import glob 
for filename in glob.glob('*.txt'): 
    with open(filename, 'w') as f: 
     f.write("") 
+1

你甚至不需要'f.write(「」)';你可以「通過」。另外'glob'模式是錯誤的。 – Cyphase

+0

@Cyphase:你說得對!我修復了這個模式。 (爲了測試,我將這個破壞性代碼限制在'test.txt'中。)是的,你可以簡單地使用'pass'。但爲了可讀性和明確性,我更喜歡'f.write(「」)'。 – Falko

+0

是的,在我評論後,我在想。好點子。 – Cyphase

0

在外殼裏,你可以通過迴應一個空字符串給它空下來一個文件:

echo '' > yourfile 
0

的一種方式這樣截斷文件:

> file 
-1

你可以使用bash的for循環。

for file in `ls`; do echo "" > $file; done 

現在不同部分的解釋:

for file in `ls` 

這for循環目錄中的所有文件創建,依次變量$file分配每個文件名。

do echo "" > $file 

此輸出空字符串("")到每個文件中,並覆蓋其內容。

done 

這結束了for循環。

請注意,這是一個破壞性的命令,將清除目錄中的每個文件!

+1

[不要循環'ls'輸出](http://mywiki.wooledge.org/ParsingLs) – tripleee

+0

'用於*中的文件;做echo「」> $文件;完成'而不是 – rojomoke

相關問題