大容量ディレクトリ(バックアップ/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」と入力すると、そのファイルは無視されます。
答え2
もちろん、プログラムが要求しない限り、実行中のプログラムに初期設定を変更するように指示することはできません。
大量のファイル操作を避けたい場合は、star
すでに使用している非標準のtarの代わりにtarを使用することをお勧めします。
star -c -f out.tar -find startdir -size -1g
例では、1Gの代わりに適切なサイズを使用してください。
これは、別のファインダー呼び出しを使用するよりもはるかに高速であり、ファイル名に興味深い文字が含まれる副作用を防ぎます。