最初の 5000 個のファイルについては「tar -czf」

最初の 5000 個のファイルについては「tar -czf」

ディレクトリ内にファイルが多すぎます。

そのディレクトリの最初の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

関連情報