私のシステムは壊れることはありませんが、常に減衰します。キャッシュが蓄積し、重複が増え、ファイル名は徐々に意味のないものになっていきます。物事をきれいに保つこと自体が仕事になりました。
長い間、私はこれを制御するために小さなツールのコレクションに依存していました。それらはすべてうまく機能しましたが、同じ欠点がありました。これらは反応的で手動であり、忘れずに実行する必要がありました。最終的に、それらはすべて、私がすでに理解している単純なルールを強制していることに気づきました。そこで私はアプリを開くのをやめ、これらのルールを自動的に適用する単一の Bash スクリプトを作成しました。
システムのクリーンアップ
私は以前、システム (ブラウザーのキャッシュ、一時ファイル、古いログ、および時間の経過とともに増大する一般的なジャンク) をクリーンアップするために BleachBit に依存していました。
BleachBit はその仕事をうまく行っていますが、ワークフローは常にわずかにずれているように感じられました。それを開いてスキャンし、リストを確認し、根本的に予測可能なものを見つけるために GUI をクリックすることを覚えておく必要がありました。私のブラウザのキャッシュは毎回同じディレクトリに存在します。一時ファイルは常に存在します /tmp。古い丸太は常に成長します /var/log。これらはどれもダイナミックでも驚くべきものでもありません。
実際には、何も「発見」していませんでした。私は同じルールを繰り返し適用していました。つまり、既知のキャッシュ ディレクトリを削除し、一時ファイルをクリアし、ゴミ箱を空にし、一定の期間より古いログ ファイルを削除しました。それはまさにシェルスクリプトが得意とする種類の作業です。
私のクリーンアップ関数は基本的に、安全で明示的なアクションのリストです。実際にクリーンアップしたいディレクトリの小さなセットと、有効期限が切れる必要があるものに対する時間のしきい値だけです。
# Clear common cache directories
rm -rf ~/.cache/*
rm -rf ~/.mozilla/firefox/*/cache2/*
rm -rf ~/.config/google-chrome/Default/Cache/*
# Clear temporary files
rm -rf /tmp/*
# Remove old logs (older than 7 days)
find /var/log -type f -mtime +7 -exec rm -f {} \;
これは攻撃的に見えますが、意図的に退屈です。すべてのパスは、以前に手動でクリーンアップしたものです。ホーム ディレクトリに対する再帰も、パターンに基づいた削除も、賢明な試みもありません。ルールに確信が持てない場合は、次を使用して予行演習から始めます。 find ... -print の代わりに -exec rm。
その結果、私は「システムをクリーンアップ」しなくなりました。それはただ起こるのです。以前は定期的な BleachBit セッションだったものは、オンデマンドで実行したり、cron でスケジュールを設定したりできる単一の機能になり、完全に忘れることができます。
重複の検索
重複ファイルの検索には Czkawka を使用しました。これは、ディレクトリ全体をスキャンし、サイズまたはハッシュでファイルを比較し、ディスク領域を浪費している場所を正確に表示できる強力なツールです。
問題は機能ではありませんでした。それは摩擦だった。 Czkawka を実行するには、別のアプリを起動し、スキャン モードを選択し、結果を待ち、毎回手動でリストを確認する必要があります。バックグラウンドで重複が絶えず集まっていたにもかかわらず、ディスク容量に問題が生じた場合にのみ実行しました。
内部的には、重複検出は魔法ではありません。これは単純なパイプラインです。ファイルをサイズ別にグループ化し、候補のハッシュを計算し、同一のハッシュを重複として扱います。それを理解すれば、「どのアプリを使えばいいのか?」という問題はなくなります。そして、「なぜこれを自動化しないのか?」になります。
私のスクリプトはまさにそのロジックに従っています。まず不必要な作業を避けるためにファイルをサイズごとにグループ化し、次にグループごとにハッシュを計算し、最後に同一のハッシュを持つファイルをレポートします。デフォルトでは、ドライ モードで実行され、結果のみが出力されます。
# Find files larger than 1MB and group by size
find ~/Documents -type f -size +1M -exec ls -l {} \; \
| awk '{print $5, $9}' \
| sort -n > sizes.txt
# Compute hashes for potential duplicates
awk '{print $2}' sizes.txt | xargs sha256sum > hashes.txt
# Show duplicate hashes
sort hashes.txt | uniq -d -w64
クリーンアップと同様に、スクリプトはデフォルトでは何も削除しません。重複のみが報告されます。それらを削除したい場合は、明示的に削除し、通常は最新のコピーを保持します。自動化は便利ですが、ブラインド削除を行うとデータが失われます。
これにより、私のCzkawkaに対するニーズは完全に置き換えられました。特別なタスクとして重複をスキャンすることはなくなりました。コマンドを 1 つ実行してリストを取得し、すぐに対処するだけです。
この Bash リダイレクト トリックは echo を置き換えます … |指示
here 文字列は、here ドキュメントのより無駄がなく、より汎用性の高いいとこです。
名前の一括変更
名前の一括変更には GPRename を使用しました。これは、特に写真、ダウンロード、または他の人から提供されたファイルを扱う場合に、あまり意識することはありませんが、結局常に使用してしまう種類のツールです。
問題は GPRename が悪いことではありませんでした。それは、ファイル名を小文字にしたり、スペースをダッシュに置き換えたり、奇妙な文字を削除したり、日付の接頭語を追加したりするなど、いつも同じことを行っていたということでした。すべてのセッションは前のセッションの小さなバリエーションでしたが、依然として GUI を開いてオプションをクリックする必要がありました。
ある時点で、私は本当に何も決めていないことに気づきました。私には個人的な命名規則があり、それを手動で何度も強制していました。
名前変更を一連のルールとして理解すると、Bash が明らかに適しています。ループ、正規表現、文字列操作はすでにあります。また、GUI とは異なり、ルールはプレーン テキストで存在します。
for f in *; do
new=$(echo "$f" \
| tr '(:upper:)' '(:lower:)' \
| tr ' ' '-' \
| sed 's/(^a-z0-9._-)//g')
echo "$f -> $new"
mv "$f" "$new"
done
他のすべてと同様に、私は通常、結果をプレビューするために mv ではなく echo から始めます。ファイルの名前変更は高速ですが、注意しないと元に戻せなくなります。これにより、私のワークフローから GPRename が完全に削除されました。名前変更ツールを開く代わりに、名前付けルールを直接適用します。
シンプルな bash スクリプトと cron を使用して Linux バックアップを自動化しました (これは GUI よりも優れています)。
ワンクリックバックアップアプリをスキップします。この rsync スクリプトを使用すると、何をいつ保存するか、ログと苦労して得たいくつかの教訓を完全に制御できます。
見返り
実際の結果として、私は 3 つの別々のアクティビティのためにこれら 3 つのアプリを開くことがなくなりました。スクリプトを 1 つだけ実行するか、バックグラウンドで実行させます。
以前はメンテナンス作業であったものが、今ではシステムを使用することによる副作用に過ぎません。ディスク容量は予測可能なままです。私のホームディレクトリは黙って朽ちることはありません。ファイル名は、私が考えなくても同じ規則に従っています。
さらに重要なことに、精神的な努力が消えました。チェックするダッシュボードも、クリックするボタンも、決定を下す必要もありません。ルールはプレーンテキストで一度記述され、一貫して適用されます。
Linuxターミナルでコマンドのチートシートを入手する方法
時には不正行為も必要です。
ここでの本当の勝利は、3 つのアプリを Bash に置き換えたことではありません。私のワークフローのほとんどは、自動化されるのを待っている一連の習慣にすぎないことに気づきました。これは、Bash スクリプトの一例にすぎず、Bash スクリプトが Linux エクスペリエンスをどのように変えることができるかにすぎません。完全なスクリプトは、私の GitHub の README にあります。