2009-02-13 63 views
7

使用Mac OS X本機工具只能查找和刪除空文件(零字節)的最簡單/最好的方法是什麼?刪除空文件(零字節)

+0

請澄清!一個文件是空的,所有空文件?你試過什麼,錯誤在哪裏? – hop 2009-02-13 02:39:26

+0

對我的回答的評論澄清了這個問題;適當更新。 – 2009-02-13 05:09:19

+0

謝謝Charles Duffy。對不起,我的英文不好:p – Bank 2009-02-13 12:32:06

回答

15

足夠簡單:

find . -type f -size 0 -exec rm -f '{}' + 

要忽略其XATTR內容(假設MacOS的find實現)的任何文件:

find . -type f -size 0 '!' -xattr -exec rm -f '{}' + 

不過,請注意,許多xattrs並不是特別有用(例如,所有下載的文件上都存在com.apple.quarantine)。

1
find /path/to/stuff -empty 

如果這就是你要找的文件列表,然後使命令:

find /path/to/stuff -empty -exec rm {} \; 

要小心!沒有辦法解決這個問題!

+0

比使用+更好;如果你有一個當前的發現 - 那樣它就會像xargs一樣在行事。 – 2009-02-13 01:50:31

1

用途:

find . -type f -size 0b -exec rm {} ';' 

與所有其他可能的變化來限制被刪除。

8

可以降低叉的潛在的巨大數量的運行由/斌/ RM:

find . -type f -size 0 -print0 | xargs -0 /bin/rm -f 

上面的命令是非常便攜,在大多數版本的Unix,而不是僅僅的Linux機器上運行,並在版本Unix可以回溯數十年。對於長文件列表,可能會執行幾個/bin/rm命令來防止列表超出命令行長度限制。

類似的效果可以用更少的打字更近的操作系統來實現,使用在find+更換最常用的xargs的風格還是適合於其他動作之外/bin/rm。在這種情況下,find將處理將真正長的文件列表拆分爲單獨的/bin/rm命令。通常引用{}以防止殼體對其做任何事情;引號並不總是必需的,但shell引用的複雜性可能過於棘手,在這裏介紹的,所以當有疑問,包括引號:

find . -type f -size 0 -exec /bin/rm -f '{}' + 

在Linux中,簡短的方法通常可使用-delete。請注意,最近的find-delete主要是直接使用unlink(2)實現的,並且不會產生zillion /bin/rm命令,或者甚至是少數幾個,即xargs+。 Mac OS find也具有-delete-empty初選。

find . -type f -empty -delete 

踩空(和新清空)的文件 - 目錄,以及 - 許多現代的Linux主機可以使用這種有效的方法:

find . -empty -delete