2015-04-26 95 views
0

我創建了vi文件,我想檢查我的主目錄中的文件以查看它們的大小。如果常規文件的大小大於1kb,我想將其備份爲帶.bak擴展名的壓縮文件。我已經開始用命令du -h --max-depth=0 * | sort -r其中列出的文件,如...Bash如果文件大小大於1kb

10K archive.tar 
1.0K activity48 
1.0K activity47 
1.0K activity46 
1.0K activity45 
1.0k activity44 
1.0K activity43 
1.0K activity42 
1.0K activity41 
1.0K activity40 
1.0K activity39 
1.0K activity38 

這些都是一些中列出的文件,但我的想法是我需要削減1場,不知怎麼的if語句創建和比較領域的東西像if [ $x -ge 1.0 ] ; do的東西。有關我應該如何解決問題的任何想法......?

回答

3

我會使用find

find . -maxdepth 1 -type f -size +1k -exec gzip -k -S .bak '{}' \; 

我可能會不使用自定義擴展爲壓縮文件,雖然,這只是要求未來的困惑。

find爲通過過濾器的文件搜索目錄(在這種情況下爲.)。可以構建複雜的過濾器;在這個相對簡單的情況下,幾個原始的過濾器鏈接到選擇

  • 文件,這些文件不超過一個層次深成.(即子目錄不搜索),
  • 是普通文件,
  • 1KB或更大,並且
  • 其中gzip -k S .bak filename以狀態碼0退出。因爲它被認爲是一個動作(其他的行動包括-delete-print

-exec過濾器是特殊的。如果過濾器不包含動作,則將隱式-print動作附加到過濾器,以便打印適合過濾器的所有文件的名稱。由於我們的過濾器包含一個動作,所以不會發生。

無論如何,在這種情況下,我們並不真正對-exec過濾器的結果感興趣,只是在運行指定命令的副作用中。知道-exec也是一個過濾器是有用的,但是,如果你想鏈接命令。例如,如果你想它們包裝後,將備份文件複製到另一個文件夾,你可以寫

find . -maxdepth 1 -type f -size +1k -exec gzip -k -S .bak '{}' \; -exec cp '{}.bak' /some/where/else/ \; 

然後cp filename.bak /some/where/else/只會如果gzip -k -S .bak filename返回與0退出狀態(即,如果指示的執行成功完成)。

3
find . -maxdepth 1 -type f -size +1k -exec gzip {} \; 

應該這樣做。那麼它會產生壓縮的.gz文件。

相關問題