Linux

在Linux上的文件樹中遞歸歸檔小文件?

  • October 20, 2010

給定一個基本目錄(如/home/user),是否有可以執行的命令創建一個備份該目錄及其子目錄中所有文本文件(即小於 100kb 的文件)的存檔?我知道你可以 tar/gz 一個目錄——但是排除文件呢?

這個想法是大多數照片、影片和其他大文件將被忽略,而在項目和伺服器中移動時,所有重要的手寫文件都可以輕鬆快速地備份。

更新

使用 skinp 的出色程式碼,我能夠備份少量文件。但是,正如 DerfK 指出的那樣 - 您可以傳遞給命令的參數的大小是有限制的。考慮到這一點,我能夠寫出內容,find希望我可以使用一些東西來讀取內容tar並繞過這個限制。另一個選項似乎是一個 sh 腳本,它可以一次將每個文件添加到存檔中。

find /home/username -type f -size -100k > list.of.small.files.txt

渲染出一個 6MB 的文件。

看看到目前為止在這裡發布的其他答案,我擔心我看到的用途xargsfind -exec {}錯誤的。如果並且當文件列表增長到足夠長並且tar -cxargs多次執行時,填充到該點的 tar 文件將被覆蓋。因此,只有最後一次呼叫的文件tar才會出現在 tarfile 中。

無論文件總數如何,也無論文件名是否包含嵌入的換行符,這是一個應該始終有效的單行:

find /home/user -type f -size -100k -print0 | tar -c -z --null --files-from=- -f backup.tgz

find命令生成要備份的以 null 結尾的文件名列表,該tar命令從管道中讀取該列表並創建 tarfile backup.tgz

引用自:https://serverfault.com/questions/192590