「tar -czf」用於前 5000 個文件

「tar -czf」用於前 5000 個文件

我的目錄中有太多檔案。

我想壓縮該目錄中的前 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

該腳本尚未最佳化,因此有一些規則:

  1. 啟動此腳本時 ARCHIVE_NAME# 不能存在,因此如果出現任何問題,請執行「rm ARCHIVE_NAME*」。
  2. 腳本將目錄條目視為 1 個條目,但「tar」則不然。 Tar 將進入目錄並遞歸添加所有文件,最終您的存檔可能會包含超過 5000 個文件。
  3. 壓縮檔案無法更新,我遺漏了“-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

相關內容