我的目錄中有太多檔案。
我想壓縮該目錄中的前 5000 個文件,file.tar.gz
然後壓縮為 5001 - 10000...等等
怎麼做?
答案1
使用 ls 產生名稱列表,並使用 head 和 tail 來過濾它們。這是一個循環執行此操作的單行程式碼。您需要知道目錄中的檔案數量(ls | wc -l 會告訴您)。
for ii in $(seq -w 5000 5000 NUMBER_OF_FILES) ; do echo $ii ; ls | head -n $ii | tail -n 5000 | tar -f ../ARCHIVE_FILE_$ii.tar.gz -czv -T - ; done
將大寫的位元替換為您想要的內容。
答案2
該腳本逐漸將所有文件新增至存檔中,並對存檔進行編號。重新命名 ARCHIVE_NAME 和“5000”。
$ COUNT_MOD=0; for i in *; do tar -r -f ARCHIVE_NAME`expr $COUNT_MOD / 5000`.tar $i; ((COUNT_MOD++)) ; done
該腳本尚未最佳化,因此有一些規則:
- 啟動此腳本時 ARCHIVE_NAME# 不能存在,因此如果出現任何問題,請執行「rm ARCHIVE_NAME*」。
- 腳本將目錄條目視為 1 個條目,但「tar」則不然。 Tar 將進入目錄並遞歸添加所有文件,最終您的存檔可能會包含超過 5000 個文件。
- 壓縮檔案無法更新,我遺漏了“-z”,抱歉:-)
答案3
您可以建立一組列出每 5000 個文件名的文件,並將它們與 tar 的 -T 參數一起使用。像這樣的事情可能會起作用:
ls -1 | split -l 5000 - tarlist
count=0
for f in tarlist*
do
tar -czf save.$count.tar.gz -T $f
count=`expr $count + 1`
done