Back to Deck
Terminal window
Terminal window
[shell]
Flatten Directory Structure
ИСХОДНИК Bash
ВЕРСИЯ 1.0
АВТОР Cododel
Bash скрипт, который выравнивает вложенные структуры директорий, перемещая все файлы из поддиректорий на корневой уровень. Автоматически обрабатывает конфликты имен файлов и очищает пустые директории.
Возможности
- Рекурсивное перемещение файлов: Находит все файлы во вложенных поддиректориях
- Разрешение конфликтов: Автоматически переименовывает дубликаты с
_1,_2и т.д. - Сохранение расширений: Сохраняет расширения файлов при переименовании
- Очистка пустых директорий: Удаляет пустые поддиректории после перемещения
- Безопасные операции: Использует абсолютные пути для предотвращения ошибок
Применение
Идеально для очистки захламленных папок загрузок, организации извлеченных архивов или консолидации разбросанных файлов:
# Выравнивание захламленной папки загрузок./flatten-dirs.sh ~/Downloads/project
# Консолидация извлеченного архива./flatten-dirs.sh ./extracted_files
# Очистка вложенных фото-директорий./flatten-dirs.sh ~/Pictures/vacationПример До и После
До:
my-folder/├── file1.txt├── subdir1/│ ├── file2.txt│ └── file1.txt (конфликт!)└── subdir2/ └── nested/ └── file3.jpgПосле:
my-folder/├── file1.txt├── file1_1.txt (переименован для избежания конфликта)├── file2.txt└── file3.jpgКак это работает
- Валидация: Проверяет существование директории
- Абсолютный путь: Конвертирует ввод в абсолютный путь
- Поиск файлов: Находит все файлы на глубине ≥2
- Обнаружение конфликтов: Проверяет существующие файлы с тем же именем
- Умное переименование: Добавляет суффикс
_Nперед расширением при конфликте - Перемещение: Перемещает файлы в корневую директорию
- Очистка: Удаляет пустые поддиректории
Использование
# Базовое использование./flatten-dirs.sh <директория>
# Пример./flatten-dirs.sh ~/Downloads/nested_folderПример вывода
Moved: /path/to/folder/subdir/file.txt -> /path/to/folder/file.txtMoved: /path/to/folder/another/file.txt -> /path/to/folder/file_1.txtMoved: /path/to/folder/deep/nested/image.jpg -> /path/to/folder/image.jpgDirectory structure flattenedИсходный код
flatten-dirs.sh
#!/bin/bash
# Check if directory is providedif [ $# -ne 1 ]; then echo "Usage: $0 <directory>" exit 1fi
# Check if directory existsif [ ! -d "$1" ]; then echo "Error: Directory '$1' does not exist" exit 1fi
# Convert to absolute pathtarget_dir=$(realpath "$1")
# Find all files in subdirectories and move them to rootfind "$target_dir" -type f -mindepth 2 | while read -r file; do filename=$(basename "$file") dest="$target_dir/$filename"
# Handle filename conflicts counter=1 while [ -f "$dest" ]; do base="${filename%.*}" ext="${filename##*.}" if [ "$base" = "$ext" ]; then # File has no extension dest="$target_dir/${base}_${counter}" else # File has extension dest="$target_dir/${base}_${counter}.${ext}" fi ((counter++)) done
# Move the file mv "$file" "$dest" echo "Moved: $file -> $dest"done
# Remove empty directoriesfind "$target_dir" -type d -mindepth 1 -empty -delete
echo "Directory structure flattened"Замечания по безопасности
- ⚠️ Эта операция модифицирует вашу файловую систему
- 🔒 Рассмотрите создание бэкапа перед запуском
- 📝 Просмотрите вывод чтобы увидеть какие файлы были перемещены
- 🗑️ Пустые директории удаляются навсегда