2016-09-21 22 views
1

我的目標是清空目錄中的每個文件。我不想實際刪除文件,我只是想刪除它的內容。將重定向符號與find -exec結合使用的更好方法

如果你想用一個文件來做到這一點,你可以做> file.txt

如果我想運行在一個目錄下的所有文件此操作,我可以做到這一點:

find . -exec /bin/bash -c '> {}' \; 

注意如何上述命令必須撥打/bin/bash。這是因爲簡單地運行這樣的命令,find . -exec > {} \;find: invalid argument ;' to -exec'我懷疑這是因爲重定向符號令命令混淆。

我想無需運行中-exec

/bin/bash如何才能做到這一點運行這個命令?

回答

2

一個簡單的方法做,這是通過使用truncate

find -type f -exec truncate -s0 {} + 

如果你只想使用bash,你可以使用一個while循環:

find -type f -print0 | 
    while IFS= read -r -d '' file; do 
     > "$file" 
    done 

最後,如果你沒」不要介意使用bash -c,最好這樣做是爲了避免多次撥打bash:

find -type f -exec bash -c 'for file; do > "$file"; done' - {} + 

雖然我不喜歡這種解決方案。

+0

不錯。第一個是完美的。 '-s0'做了什麼?我找不到任何信息。 – noobcoder

+0

'-s0'表示:將文件截斷爲0字節。 – redneb

+0

有趣的是,你不喜歡的解決方案比'find-with-'-print0'更具地道性(和便攜性)。 –

相關問題