file-organization について
AI エージェントが設定ルールに従ってファイルを整理するスキルです。重複処理、ファイル名の統一、実行前プレビュー、操作ログによる取り消しに対応します。
主な機能
- 01種類、日付、プロジェクト、優先度で分類
- 02YAML または JSON のカスタムルール
- 03コンテンツハッシュによる重複検出
- 04拡張子を維持したファイル名の統一
- 05移動計画のプレビューと操作記録
- 06古いファイルのアーカイブ
活用シーン
- 01散らかった Downloads フォルダーの整理
- 02ファイル名の形式統一
- 03整理前の重複ファイル確認
- 04フォルダー構成を保った古いファイルの保管
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ seb1n/ awesome-ai-agent-skills --skill file-organizationインストール後、Claude Code で/file-organizationを入力して読み込まれたか確認します。
詳細
ファイル整理
このスキルを使うと、AI エージェントは散らかったディレクトリを整理できます。対象のパスを指定すると、エージェントはすべてのファイルをスキャンし、設定可能なルールセットを使って分類したうえで、適切に構成されたディレクトリツリーに移動します。ファイルの種類、更新日、プロジェクトとの関連性、優先度に基づく整理に対応しています。高度な機能として、コンテンツハッシュによる重複検出、一貫性のある命名規則、ドライランによるプレビュー、古いファイルの自動アーカイブがあります。
ワークフロー
-
対象ディレクトリをスキャンする 指定したディレクトリ内のすべてのファイルを再帰的に列挙します。各ファイルの名前、拡張子、サイズ、作成日、更新日、コンテンツハッシュ(重複検出時に遅延計算する SHA-256)などのメタデータを収集します。デフォルトでは、隠しファイルとシステムファイル(例:
.DS_Store、Thumbs.db)を除外しますが、設定でユーザーが対象に含められるようにします。 -
ルールセットに基づいてファイルを分類する 有効な整理方法を適用して、各ファイルの移動先フォルダーを割り当てます。デフォルトの方法では、組み込みの拡張子マップを使ってファイルの種類ごとに分類します(例:
.pdf→documents/、.png→images/、.mp3→audio/)。別の方法として、更新日ごとに分類する(2025/01/、2025/02/)、パスのプレフィックスやファイル名のタグから推定したプロジェクト名ごとに分類する、ファイル名に含まれる優先度ラベルごとに分類する(例:URGENT-report.pdf→priority-high/)方法があります。ユーザーは、任意の方法を上書きまたは拡張するために、YAML または JSON 形式のカスタムルールファイルを指定できます。 -
重複を検出して処理する スキャンしたすべてのファイルのコンテンツハッシュを比較します。重複が見つかった場合、更新日時が最も新しいコピーを移動先に残し、古いコピーをステージングフォルダー
_duplicates/に移動します。完全に削除する前に、重複の概要をユーザーに提示して確認してもらいます。必要に応じて、ディスク容量を節約しつつパス参照を維持するため、重複ファイルを正規のコピーへのシンボリックリンクに置き換えることもできます。 -
命名規則を適用する 設定された規則に従ってファイル名を正規化します。選択肢には、kebab-case(
quarterly-report-2025.pdf)、snake_case(quarterly_report_2025.pdf)、日付を先頭に付ける形式(2025-01-15_quarterly-report.pdf)があります。指定に応じて、特殊文字を削除し、空白をまとめ、Unicode を ASCII に音訳します。元の拡張子は保持します。操作を元に戻せるよう、名前の変更をすべて記録します。 -
移動計画を実行する(またはドライランを行う) ファイルを移動する前に、すべてのファイルの移動元と移動先を示す移動計画を作成します。ドライランモード(初回実行時のデフォルト)では、計画を表示して確認を求めます。確認後、必要に応じて移動先のディレクトリを作成し、ファイルをアトミックに移動します。対象ディレクトリのルートにマニフェストファイル(
_organization-log.json)を作成し、実行したすべての操作を記録して、完全に元に戻せるようにします。 -
古いファイルをアーカイブする 必要に応じて、設定可能なしきい値(デフォルト:12 か月)を超えてアクセスも更新もされていないファイルを特定します。整理済みのサブフォルダー構造を維持したまま、これらのファイルを
_archive/ディレクトリに移動します。要求に応じて、アーカイブフォルダーを.tar.gzまたは.zipに圧縮します。解放できた容量の合計をユーザーに通知します。
使用方法
エージェントにディレクトリを指定し、整理方法を選びます。整理方法を指定しない場合、エージェントはデフォルトでファイルの種類ごとに整理します。
"Organize my ~/Downloads folder by file type."
"Sort the files in /data/raw-exports by modification date, using YYYY/MM subfolders."
"Organize ~/Projects/acme-app using this config file: .file-org-rules.yaml"
カスタムルールファイルは次のようになります。
# .file-org-rules.yaml
strategy: type
naming: kebab-case
date_prefix: true
archive_after_days: 365
type_map:
documents: [pdf, docx, txt, md, csv]
images: [jpg, jpeg, png, gif, svg, webp]
audio: [mp3, wav, flac, aac]
video: [mp4, mov, avi, mkv]
archives: [zip, tar, gz, rar, 7z]
code: [py, js, ts, go, rs, java, c, cpp, h]
data: [json, xml, yaml, yml, toml, sql]
ignore:
- node_modules
- .git
- __pycache__
例
例 1 — 散らかったダウンロードフォルダーを整理する
整理前:
~/Downloads/
├── IMG_4012.jpg
├── IMG_4012 (1).jpg ← duplicate
├── Q3 Financial Report.pdf
├── meeting-notes.txt
├── setup_installer.exe
├── song.mp3
├── profile photo.PNG
├── data_export.csv
├── slides_final_v2.pptx
├── backup.zip
└── vacation vid.mp4
ユーザー入力:
"Organize ~/Downloads by file type. Use kebab-case naming. Detect duplicates."
エージェントの出力(ドライランプレビュー):
Scan complete: 11 files found, 1 duplicate detected.
Duplicate: IMG_4012 (1).jpg is identical to IMG_4012.jpg (SHA-256 match)
→ Moving IMG_4012 (1).jpg to _duplicates/
Move plan:
IMG_4012.jpg → images/img-4012.jpg
profile photo.PNG → images/profile-photo.png
Q3 Financial Report.pdf → documents/q3-financial-report.pdf
meeting-notes.txt → documents/meeting-notes.txt
data_export.csv → documents/data-export.csv
slides_final_v2.pptx → presentations/slides-final-v2.pptx
song.mp3 → audio/song.mp3
vacation vid.mp4 → video/vacation-vid.mp4
setup_installer.exe → applications/setup-installer.exe
backup.zip → archives/backup.zip
Confirm? (yes / no / edit plan)
整理後(確認後):
~/Downloads/
├── _duplicates/
│ └── img-4012-1.jpg
├── _organization-log.json
├── applications/
│ └── setup-installer.exe
├── archives/
│ └── backup.zip
├── audio/
│ └── song.mp3
├── documents/
│ ├── data-export.csv
│ ├── meeting-notes.txt
│ └── q3-financial-report.pdf
├── images/
│ ├── img-4012.jpg
│ └── profile-photo.png
├── presentations/
│ └── slides-final-v2.pptx
└── video/
└── vacation-vid.mp4
例 2 — 標準構成のプロジェクトリポジトリを整理する
ユーザー入力:
"Reorganize ~/code/my-api into a standard Go project layout. Move source files, tests, configs, and docs into conventional locations."
エージェントの出力(ドライランプレビュー):
Detected project type: Go (found go.mod)
Proposed structure:
cmd/my-api/main.go ← entry point (moved from ./main.go)
internal/handlers/ ← HTTP handlers (moved from ./handlers/)
internal/models/ ← data models (moved from ./models/)
internal/service/ ← business logic (moved from ./service/)
pkg/ ← exported library code (empty — populate later)
configs/config.yaml ← moved from ./config.yaml
docs/api-spec.md ← moved from ./API.md
scripts/migrate.sh ← moved from ./migrate.sh
test/integration/ ← moved from ./integration_tests/
go.mod ← unchanged
go.sum ← unchanged
README.md ← unchanged
7 files moved, 3 directories created, 2 files unchanged.
Import paths in Go files updated automatically.
Confirm? (yes / no / edit plan)
ベストプラクティス
- 必ず最初にドライランを実行してください。 完全な計画をユーザーに提示する前に、ファイルを移動してはいけません。稼働中のプロジェクトディレクトリを誤って再編成すると、ビルドやツールが動作しなくなる可能性があります。
- マニフェストログを保存してください。 移動、名前変更、削除など、すべての操作を対象ディレクトリのルートにある JSON ログファイルに記録してください。これにより、操作を完全に元に戻せます。
- バージョン管理に配慮してください。 対象ディレクトリが Git リポジトリ内にある場合は、履歴を保持できるよう、通常のファイルシステム上の移動ではなく
git mvを使用してください。未コミットの変更がある場合は、ユーザーに警告してください。 - ファイル名の衝突に対処してください。 異なる 2 つのファイルが同じ移動先パスになる場合は、黙って上書きせず、数値の接尾辞を追加してください(例:
report.pdfとreport-1.pdf)。 - 既知の依存関係ディレクトリを除外してください。 デフォルトでは、
node_modules/、.git/、__pycache__/、vendor/など、ツールによって管理されるディレクトリを除外してください。これらを再編成すると、パッケージマネージャーが正常に動作しなくなります。 - 移動後に整合性を検証してください。 実行後、移動した各ファイルの SHA-256 ハッシュを、スキャン時に記録した元のハッシュと比較し、データが破損していないことを確認してください。
エッジケース
- 空のディレクトリが残る場合。 フォルダーからファイルを移動した後、移動元のフォルダーが空になっているか確認してください。ディレクトリ構造をすっきり保てるよう、空のディレクトリの削除を提案してください。
- シンボリックリンクとハードリンク。 スキャン中にシンボリックリンクをたどらないでください。リンクとして記録し、リンクを移動する、リンク先を解決する、またはスキップする、のどの方法で処理するかユーザーに確認してください。
- 拡張子のないファイル。 拡張子のないファイルは、デフォルトで
other/に分類してください。シバン行(例:#!/usr/bin/env python3)がある場合は、インタープリターから種類を推定してください。 - 非常に大きなディレクトリ(ファイル数が 10,000 を超える場合)。 ファイルをバッチ処理し、進捗を表示してください。ファイル一覧全体を一度にメモリに読み込まないでください。
- 権限エラー。 ファイルシステムの権限が原因でファイルを読み取れない、または移動できない場合は、そのことをログに記録してスキップし、残りのファイルの処理を続けてください。最後に、スキップしたファイルの概要を提示してください。
- ネットワークドライブまたは外付けドライブ。 ネットワーク共有または外付けドライブ上のファイルの再編成には大幅に時間がかかる可能性があり、処理が中断されるとファイルの状態に不整合が生じるおそれがあることをユーザーに警告してください。まずローカルコピーで作業することを推奨してください。