diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..449e6b636 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +ignore_file.txt + +# Desktop Organizer generated files +organizer_log.txt +整理済み/ + +# System files +.DS_Store \ No newline at end of file diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 000000000..dba278886 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,173 @@ +# インストールガイド + +デスクトップファイル整理アプリのインストール方法を説明します。 + +## 必要な環境 + +- Python 3.6以上 +- Windows / macOS / Linux + +## インストール方法 + +### Linux / macOS の場合 + +#### 方法1: セットアップスクリプトを使用(推奨) + +```bash +cd /path/to/git-practice +./setup.sh +``` + +対話形式で以下の3つの方法から選択できます: +1. シンボリックリンクを作成(推奨) +2. エイリアスを作成 +3. 現在の場所から直接実行 + +#### 方法2: 手動セットアップ + +**シンボリックリンクを作成:** +```bash +mkdir -p ~/.local/bin +ln -s /path/to/git-practice/desktop_organizer.py ~/.local/bin/organize-desktop +chmod +x /path/to/git-practice/desktop_organizer.py + +# PATHに追加(まだの場合) +echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc +source ~/.bashrc +``` + +**エイリアスを作成:** +```bash +echo 'alias organize-desktop="python3 /path/to/git-practice/desktop_organizer.py"' >> ~/.bashrc +source ~/.bashrc +``` + +### Windows の場合 + +#### 方法1: バッチファイルを使用 + +1. `organize-desktop.bat` を作成(例:デスクトップに保存) + +```batch +@echo off +python "C:\path\to\git-practice\desktop_organizer.py" %* +``` + +2. ダブルクリックで実行、またはコマンドプロンプトから呼び出し + +#### 方法2: Python を直接呼び出し + +```cmd +python C:\path\to\git-practice\desktop_organizer.py --dry-run +``` + +#### 方法3: PATHに追加 + +1. システム環境変数を開く +2. `Path` 変数を編集 +3. `C:\path\to\git-practice` を追加 +4. コマンドプロンプトを再起動 + +```cmd +python desktop_organizer.py --dry-run +``` + +## 使い方 + +### 基本的な使い方 + +```bash +# 確認モード(実際には移動しない) +organize-desktop --dry-run + +# 実際に整理を実行 +organize-desktop + +# 任意のフォルダを指定 +organize-desktop --path /path/to/folder +``` + +### Windowsの場合 + +```cmd +REM 確認モード +python desktop_organizer.py --dry-run + +REM 実際に整理 +python desktop_organizer.py + +REM カスタムパス +python desktop_organizer.py --path "C:\Users\YourName\Downloads" +``` + +## トラブルシューティング + +### Python が見つからない + +**Linux / macOS:** +```bash +# Python 3がインストールされているか確認 +python3 --version + +# インストールされていない場合 +# Ubuntu / Debian +sudo apt update && sudo apt install python3 + +# macOS (Homebrew) +brew install python3 +``` + +**Windows:** +1. [Python公式サイト](https://www.python.org/downloads/)からダウンロード +2. インストール時に「Add Python to PATH」にチェック + +### 権限エラー + +```bash +# Linux / macOS +chmod +x desktop_organizer.py +``` + +### PATHが通らない + +```bash +# 現在のPATHを確認 +echo $PATH + +# ~/.local/bin が含まれていない場合 +export PATH="$HOME/.local/bin:$PATH" + +# 恒久的に設定 +echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc +source ~/.bashrc +``` + +## アンインストール + +### シンボリックリンクを削除 + +```bash +rm ~/.local/bin/organize-desktop +``` + +### エイリアスを削除 + +```bash +# ~/.bashrc または ~/.zshrc から該当行を削除 +nano ~/.bashrc +# 保存後 +source ~/.bashrc +``` + +### スクリプト自体を削除 + +```bash +cd /path/to/git-practice +git checkout desktop_organizer.py +# または完全に削除 +rm desktop_organizer.py +``` + +## サポート + +問題が発生した場合は、リポジトリのIssueセクションで報告してください。 diff --git a/README.md b/README.md index 9e7d03700..e0e993ece 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,89 @@ # git-practice + このリポジトリはGit動画講座用です. +ローカルリポで更新 +re a-se-practice上で更新(2回目) +stashでコンフリクト発生 +複数内容のスタッシュ2加盟 + +--- + +## デスクトップファイル整理アプリ 📁 + +デスクトップ上のファイルを自動的に整理するPythonアプリケーションです。 + +### 機能 + +- ファイルの拡張子に基づいて自動分類 +- 以下のカテゴリに整理: + - 📷 画像(.jpg, .png, .gif など) + - 📄 ドキュメント(.pdf, .docx, .txt など) + - 🎵 音楽(.mp3, .wav, .flac など) + - 🎬 動画(.mp4, .avi, .mkv など) + - 📦 アーカイブ(.zip, .rar, .7z など) + - 💻 プログラム(.py, .js, .html など) + - 📎 その他 +- ドライランモードで事前確認可能 +- 整理ログの自動記録 + +### インストール + +#### クイックスタート(Linux / macOS) + +```bash +# セットアップスクリプトを実行 +./setup.sh +``` + +対話形式で選択できます: +1. シンボリックリンク作成(推奨) - `organize-desktop` コマンドで実行 +2. エイリアス作成 - シェル設定に追加 +3. 直接実行 - セットアップ不要 + +#### Windows の場合 + +`organize-desktop.bat` をダブルクリックして実行するか、以下のコマンドを使用: + +```cmd +python desktop_organizer.py --dry-run +``` + +詳しいインストール方法は [INSTALL.md](INSTALL.md) をご覧ください。 + +### 使い方 + +#### 基本的な使い方 + +```bash +# デスクトップを整理(実行前に確認) +python3 desktop_organizer.py --dry-run + +# デスクトップを実際に整理 +python3 desktop_organizer.py +``` + +#### カスタムパスを指定 + +```bash +# 任意のフォルダを整理 +python3 desktop_organizer.py --path /path/to/folder + +# ドライランで確認 +python3 desktop_organizer.py --path /path/to/folder --dry-run +``` + +### 必要な環境 + +- Python 3.6以上 +- 標準ライブラリのみ使用(追加インストール不要) + +### 注意事項 + +- 実行前に必ず `--dry-run` オプションで確認することをお勧めします +- 整理されたファイルは「整理済み」フォルダ内にカテゴリ別に配置されます +- 整理ログは `organizer_log.txt` に保存されます +- 同名ファイルが存在する場合、タイムスタンプが自動的に追加されます + +### ライセンス + +このプロジェクトはMITライセンスの下で公開されています。 \ No newline at end of file diff --git a/desktop_organizer.py b/desktop_organizer.py new file mode 100755 index 000000000..3e90b4fd8 --- /dev/null +++ b/desktop_organizer.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +デスクトップファイル整理アプリ +Desktop File Organizer + +このスクリプトはデスクトップ上のファイルを自動的に整理します。 +ファイルの拡張子に基づいて適切なフォルダに移動します。 +""" + +import os +import shutil +from pathlib import Path +from datetime import datetime + + +class DesktopOrganizer: + """デスクトップのファイルを整理するクラス""" + + # ファイルタイプごとのカテゴリ定義 + FILE_CATEGORIES = { + '画像': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg', '.ico', '.webp'], + 'ドキュメント': ['.pdf', '.doc', '.docx', '.txt', '.xlsx', '.xls', '.ppt', '.pptx', '.odt', '.ods'], + '音楽': ['.mp3', '.wav', '.flac', '.aac', '.ogg', '.m4a', '.wma'], + '動画': ['.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv', '.webm'], + 'アーカイブ': ['.zip', '.rar', '.7z', '.tar', '.gz', '.bz2'], + 'プログラム': ['.py', '.js', '.html', '.css', '.java', '.cpp', '.c', '.h', '.sh', '.php', '.rb'], + 'その他': [] # 上記以外のファイル + } + + def __init__(self, desktop_path=None): + """ + 初期化 + + Args: + desktop_path: デスクトップのパス(Noneの場合は自動検出) + """ + if desktop_path is None: + self.desktop_path = self._get_desktop_path() + else: + self.desktop_path = Path(desktop_path) + + self.log_file = self.desktop_path / 'organizer_log.txt' + self._log(f"デスクトップパス: {self.desktop_path}") + + def _get_desktop_path(self): + """デスクトップのパスを取得(OS別に対応)""" + home = Path.home() + + # Windows, Mac, Linux に対応 + possible_paths = [ + home / 'Desktop', + home / 'デスクトップ', + home / 'desktop' + ] + + for path in possible_paths: + if path.exists(): + return path + + # デフォルトでHomeディレクトリを返す + return home + + def _log(self, message): + """ログメッセージを記録""" + timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + log_message = f"[{timestamp}] {message}\n" + print(log_message.strip()) + + with open(self.log_file, 'a', encoding='utf-8') as f: + f.write(log_message) + + def _get_file_category(self, file_path): + """ + ファイルのカテゴリを取得 + + Args: + file_path: ファイルのパス + + Returns: + カテゴリ名 + """ + ext = file_path.suffix.lower() + + for category, extensions in self.FILE_CATEGORIES.items(): + if ext in extensions: + return category + + return 'その他' + + def organize(self, dry_run=False): + """ + デスクトップを整理 + + Args: + dry_run: Trueの場合、実際にファイルを移動せずに結果を表示 + """ + if not self.desktop_path.exists(): + self._log(f"エラー: デスクトップパスが見つかりません: {self.desktop_path}") + return + + self._log("=" * 50) + self._log("デスクトップファイル整理を開始します") + self._log(f"モード: {'ドライラン(確認のみ)' if dry_run else '実行'}") + self._log("=" * 50) + + # 整理用フォルダの作成 + organized_folder = self.desktop_path / '整理済み' + + if not dry_run and not organized_folder.exists(): + organized_folder.mkdir() + self._log(f"フォルダ作成: {organized_folder}") + + # デスクトップのファイルをスキャン + files_moved = 0 + files_skipped = 0 + + for item in self.desktop_path.iterdir(): + # ディレクトリやシステムファイルはスキップ + if item.is_dir() or item.name.startswith('.') or item == self.log_file: + continue + + # このスクリプト自体はスキップ + if item.name == 'desktop_organizer.py': + continue + + # カテゴリを取得 + category = self._get_file_category(item) + + # カテゴリフォルダのパス + category_folder = organized_folder / category + + # 移動先のパス + destination = category_folder / item.name + + # ファイル名が既に存在する場合は、タイムスタンプを追加 + if destination.exists(): + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + name_without_ext = item.stem + destination = category_folder / f"{name_without_ext}_{timestamp}{item.suffix}" + + if dry_run: + self._log(f"[確認] {item.name} → {category}/{destination.name}") + files_moved += 1 + else: + try: + # カテゴリフォルダを作成 + category_folder.mkdir(parents=True, exist_ok=True) + + # ファイルを移動 + shutil.move(str(item), str(destination)) + self._log(f"移動: {item.name} → {category}/{destination.name}") + files_moved += 1 + except Exception as e: + self._log(f"エラー: {item.name} の移動に失敗 - {str(e)}") + files_skipped += 1 + + self._log("=" * 50) + self._log(f"整理完了: {files_moved}個のファイルを処理") + if files_skipped > 0: + self._log(f"スキップ: {files_skipped}個のファイル") + self._log("=" * 50) + + +def main(): + """メイン関数""" + import argparse + + parser = argparse.ArgumentParser( + description='デスクトップのファイルを自動整理します', + formatter_class=argparse.RawDescriptionHelpFormatter + ) + parser.add_argument( + '--path', + type=str, + help='整理するフォルダのパス(デフォルト: デスクトップ)' + ) + parser.add_argument( + '--dry-run', + action='store_true', + help='実際にファイルを移動せず、結果を確認のみ' + ) + + args = parser.parse_args() + + # オーガナイザーを作成して実行 + organizer = DesktopOrganizer(desktop_path=args.path) + organizer.organize(dry_run=args.dry_run) + + +if __name__ == '__main__': + main() diff --git a/organize-desktop.bat b/organize-desktop.bat new file mode 100644 index 000000000..be46bb9c7 --- /dev/null +++ b/organize-desktop.bat @@ -0,0 +1,24 @@ +@echo off +REM デスクトップファイル整理アプリ - Windowsバッチファイル +REM このファイルのパスを編集して、desktop_organizer.pyの場所を指定してください + +setlocal + +REM スクリプトのディレクトリを取得 +set SCRIPT_DIR=%~dp0 +set PYTHON_SCRIPT=%SCRIPT_DIR%desktop_organizer.py + +REM Python 3が利用可能か確認 +where python >nul 2>nul +if %ERRORLEVEL% NEQ 0 ( + echo エラー: Pythonが見つかりません + echo Python 3をインストールしてPATHに追加してください + echo https://www.python.org/downloads/ + pause + exit /b 1 +) + +REM Pythonスクリプトを実行 +python "%PYTHON_SCRIPT%" %* + +endlocal diff --git a/setup.sh b/setup.sh new file mode 100755 index 000000000..5cdb350be --- /dev/null +++ b/setup.sh @@ -0,0 +1,138 @@ +#!/bin/bash +# デスクトップファイル整理アプリのセットアップスクリプト + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SCRIPT_NAME="desktop_organizer.py" +SCRIPT_PATH="$SCRIPT_DIR/$SCRIPT_NAME" + +echo "==================================" +echo "デスクトップファイル整理アプリ" +echo "セットアップスクリプト" +echo "==================================" +echo "" + +# スクリプトが存在するか確認 +if [ ! -f "$SCRIPT_PATH" ]; then + echo "エラー: $SCRIPT_NAME が見つかりません" + exit 1 +fi + +# Python 3がインストールされているか確認 +if ! command -v python3 &> /dev/null; then + echo "エラー: Python 3がインストールされていません" + echo "Python 3.6以上をインストールしてください" + exit 1 +fi + +PYTHON_VERSION=$(python3 --version | cut -d' ' -f2) +echo "Python バージョン: $PYTHON_VERSION" +echo "" + +# セットアップ方法の選択 +echo "セットアップ方法を選択してください:" +echo "" +echo "1) シンボリックリンクを作成(推奨)" +echo " ~/.local/bin/ にリンクを作成します" +echo " コマンド名: organize-desktop" +echo "" +echo "2) エイリアスを作成" +echo " ~/.bashrc または ~/.zshrc にエイリアスを追加します" +echo " コマンド名: organize-desktop" +echo "" +echo "3) 現在の場所から直接実行" +echo " セットアップは不要です" +echo "" + +read -p "選択 (1/2/3): " choice + +case $choice in + 1) + # シンボリックリンクを作成 + BIN_DIR="$HOME/.local/bin" + LINK_NAME="organize-desktop" + + # ディレクトリが存在しない場合は作成 + if [ ! -d "$BIN_DIR" ]; then + mkdir -p "$BIN_DIR" + echo "作成: $BIN_DIR" + fi + + # 実行権限を付与 + chmod +x "$SCRIPT_PATH" + + # シンボリックリンクを作成 + ln -sf "$SCRIPT_PATH" "$BIN_DIR/$LINK_NAME" + echo "" + echo "✅ セットアップ完了!" + echo "" + echo "次のコマンドでPATHに追加してください(まだの場合):" + echo " export PATH=\"\$HOME/.local/bin:\$PATH\"" + echo "" + echo "シェル設定ファイルに追加する場合:" + echo " echo 'export PATH=\"\$HOME/.local/bin:\$PATH\"' >> ~/.bashrc" + echo " source ~/.bashrc" + echo "" + echo "使い方:" + echo " organize-desktop --dry-run # 確認モード" + echo " organize-desktop # 実行" + ;; + + 2) + # エイリアスを作成 + SHELL_RC="" + if [ -n "$ZSH_VERSION" ]; then + SHELL_RC="$HOME/.zshrc" + elif [ -n "$BASH_VERSION" ]; then + SHELL_RC="$HOME/.bashrc" + else + echo "シェル設定ファイルを手動で指定してください:" + read -p "パス (例: ~/.bashrc): " SHELL_RC + fi + + ALIAS_LINE="alias organize-desktop='python3 $SCRIPT_PATH'" + + # すでにエイリアスが存在するか確認 + if grep -q "organize-desktop" "$SHELL_RC" 2>/dev/null; then + echo "⚠️ エイリアスは既に存在します" + else + echo "" >> "$SHELL_RC" + echo "# デスクトップファイル整理アプリ" >> "$SHELL_RC" + echo "$ALIAS_LINE" >> "$SHELL_RC" + echo "" + echo "✅ セットアップ完了!" + fi + + echo "" + echo "次のコマンドで設定を反映してください:" + echo " source $SHELL_RC" + echo "" + echo "使い方:" + echo " organize-desktop --dry-run # 確認モード" + echo " organize-desktop # 実行" + ;; + + 3) + # 直接実行 + chmod +x "$SCRIPT_PATH" + echo "" + echo "✅ 実行権限を付与しました!" + echo "" + echo "使い方:" + echo " cd $SCRIPT_DIR" + echo " python3 desktop_organizer.py --dry-run # 確認モード" + echo " python3 desktop_organizer.py # 実行" + echo "" + echo "または:" + echo " ./desktop_organizer.py --dry-run" + ;; + + *) + echo "無効な選択です" + exit 1 + ;; +esac + +echo "" +echo "詳しい使い方は README.md をご覧ください"