Python
將大約 1GB 的文件打包到 tar 存檔中的 Bash 腳本
我有幾個包含數千個文件的文件夾,每個文件夾的大小大約為 3-10GB。現在,我想對文件夾中的這些文件進行 tar,每個 tar 文件的大小應約為 1GB。之後,我想使用 Python 來處理這些 tar 文件。
#!/bin/bash dirlist=$(find $1 -mindepth 1 -maxdepth 1 -type d) stored_date=$(date +%Y-%m-%d --date="-1 day") #stored_date='2019-10-23' for dir in $dirlist do ( cd $dir tar_file=${PWD##*/} tar_file="${tar_file}_${stored_date}.tar" echo "${tar_file}" tar -c $stored_date*.html --tape-length=1000M -f ${tar_file} --remove-files ) done
它可以很好地創建 1GB 塊 - 但是使用“–tape-length”選項,Python 遇到了各種各樣的問題
tarfile.ReadError:數據意外結束
(加:我也想使用 Python 處理文件,這些文件被分割在 tar 檔案的邊緣)
有Linux解決方案嗎?我找到了 star 而不是 tar 但還沒有嘗試過——如果可能的話,我更願意使用標準的 tar。
如何在每個目錄循環中嵌套第二個循環以跟踪每個文件的大小,然後再將其附加到 tar 文件?這是我的意思的示意性虛擬碼:
max_size=$((1024*1024*1024)) total_size=0 for dir in $dirlist ; do for foo in $dir/*; do this_size="$(stat -c"%s" $foo)" if [ $(($total_size + $this_size)) -le $max_size ] ; then tar --append ... $foo total_size="$(($total_size + $this_size))" else # start new tar file here tar -c ... $foo total_size="$this_size" fi done done