特定のパスで特定の時間より古いファイルを検索するスクリプトを作成しようとしています。引数リストの長さのため、直接ではなく、見つかったファイルをリストに書き込みます。2 番目のステップでは、このリストを取得してそれらのファイルを tar します。後で tar リストを読み取り、ソース ディレクトリにアーカイブされたファイルを削除する予定です。
特定のファイルを見つけてリストを書き込む:
解決策: -type f を追加
find /path/to/*/xfiles/* -type f -mtime +8 -print > /tmp/archiv-xfiles.manifest
私が見る限り、これは正しく機能しています。ファイルリストは実行ごとに異なりますが、これは相対的に機能している mtime を使用した効果です。次に、リストを取得して、リストされたファイルを tar します。
tar -czvPf /tmp/archiv-xfiles.tar.gz --files-from /tmp/archiv-xfiles.manifest
この時点で、各ファイルを 3 回含むアーカイブで立ち往生していますか? 印刷されたマニフェスト リストは正しく、各ファイルは 1 回だけ表示されます。私は悪ですか?
私はそのように続けますが:
tar -tvf /tmp/archiv-xfiles.tar.gz > /tmp/archiv-xfiles-to-delete.manifest
アーカイブが破損していないことを確認するために、ここでもエラー チェックが必要ですか?
diff /tmp/archiv-xfiles.manifest /tmp/archiv-xfiles-to-delete.manifest > /dev/null
v1=$?
if [ $v1 == 0 ] ; then
今、私は進むべき道が 2 つあります。最初の方法です。どちらが速いですか?:
cat /tmp/archiv-xfiles-to-delete.manifest | xargs rm -rf
または2番目:
while read line
do
rm -f $line
done < /tmp/archiv-xfiles-to-delete.manifest
どれがいいかわからない?スイッチを使用するtar --remove-files
のは良くないと思いますか、それともアイデアを節約しますか?
そして残り:
rm -f /tmp/archiv-xfiles.manifest
rm -f /tmp/archiv-xfiles-to-delete.manifest
elif
echo ERROR, check manifest files! | mail -s ScriptError someone@somewhere.com
fi
リストに tar を付けることで何がうまくいかないのか、誰かが教えてくれるかもしれませんが、スクリプト全体に関するアイデアは本当にありがたいです。たとえば、tar オプション「--remove-files」は、tar コンテンツを一覧表示し、diff および削除する方法と同じ効果を達成するための保存および信頼できる方法ですか?