プロセスの開始後にTarアーカイブプロセスから特定のファイルを削除する

プロセスの開始後にTarアーカイブプロセスから特定のファイルを削除する

大容量ディレクトリ(バックアップ/OSの再インストールに使用されるデフォルトフォルダなど)を圧縮するときは、GB単位のビデオなどの特定の大容量ファイルを除外することがよくあります。ただし、ホームフォルダのすべての機能のため、始める前に除外(--excludeを使用)するのに役立つ可能性があるすべてのファイルを覚えておくことはしばしば非現実的です。私はtarに与えることができるどんなファイルでも終了し、次のファイルに移動して、終了したファイルをアーカイブの外に残すように指示する一種の入力を探しています。 Control-Cに似ていますが、プロセス全体を停止するのではなく、現在のファイルのみを停止します。

具体的には、長期実行tar -cvfまたはtar -cvzf-v

ある種のGUIツールを使用することはオプションではありません。 tarは通常、再インストール前に破損したシステムの最小(CLIのみ)環境で実行されるためです。私が質問している具体的な例は次のとおりです。

ベストアンサー1

私はそれが可能だとは思いませんが、tarから自動的に大きなファイルを除外することもできます。例えば、

find mydir ! -type f -o \( -type f -size -1000k \) | tar cv --no-recursion -T - -f /tmp/tar 

1000kを超えるファイルは保存されません。


以下は、大容量ファイルのアーカイブを停止するために「n」個の応答を対話的に要求するスクリプトです。

find mydir \( -type f -size +1000k -exec /tmp/biggie {} \; \) -o -print |
tar c --no-recursion -T - -f /tmp/tar

/tmp/biggieスクリプトはどこにありますか?

#!/bin/bash
if ! read -t 10 -n 1 -p "$1 ok ?" reply || [ n != "$reply" ]
then echo >&2
     echo "$1"
else echo " ignoring $1" >&2
fi

10秒あたり1文字のタイムアウト(-n)とファイル名をプロンプト(-p)で指定してbash関連の読み取りを実行します。 10秒以内に「n」と入力すると、そのファイルは無視されます。

おすすめ記事