
現在、私は次のコマンドを使用して7日より古いファイルを含むアーカイブを作成しています。
find /var/tunningLog/ -type f -mtime +7 -print0 | tar -czf "/var/tunningLog/$(date '+%Y-%m-%d').tar.gz" --null -T - && echo "OK" || echo "NOK"
しかし、時間がかかります(現在/var/tunningLog/
49G)。プロセスをスピードアップしたりコマンドを改善したりする方法はありますか?ありがとう
答え1
/var/TuningLog
でアーカイブを作成しているため、作成するアーカイブには、/var/TuningLog
1週間前または前に作成されたアーカイブが含まれています。あなたのプロフィールは引き続き増加しています。
目的のファイルが除外されない場合は、を変更してfind
そのファイルを除外します()。\! -name '*.tar.gz'
または
プロフィールを他の場所に保存してください。
答え2
パイプの使用は、find | tar
コードを再利用する唯一の方法がパイプを介してコマンドを結合することだけであったUNIX時代のアーティファクトです。
stat(2)
各ファイルに対して2回実行する必要があるため、遅くなります。
コマンドで
find(1)
目的のファイルが識別された場合tar(1)
tarにはアーカイブのためのメタデータが必要なので、他の時間は内部から来ます。
'33年からは共有ライブラリを利用して再利用可能なコードを構成する別の方法があり、'16年からはlibfind
機能を再利用できるようにfindコマンドのすべての機能を含める方法がありました。
たとえば、非標準tar
オプションを使用しているため、tarヘッダーの生成に誤ったコードとして知られているgtarの代わりに-T
使用しているようです。gtar
tar
確認してくださいstar
。これは最も古い無料のtar
実装であり、libfind
2005年以降のサポートが含まれており、-find
コマンドラインの右側で構文を使用できるオプションのサポートが含まれています。find(1)
-find
たとえば、schilytools Web ページのマニュアルページを確認します。http://schilytools.sourceforge.net/man/man1/star.1.html
これにより、次のようなコマンドラインが生成されます。
star -c -f /tmp/xxx.tar -find . -type f -mtime +7