Как удалить пустые каталоги с файлами .directory в Linux
Чистка файловой системы является важной задачей для поддержания порядка и эффективности работы. После удаления ненужных файлов у многих пользователей возникает необходимость избавиться от пустых каталогов, которые могут занимать место и создавать путаницу. В данной статье мы рассмотрим, как можно эффективно удалить пустые каталоги, содержащие только скрытые файлы .directory
.
Что такое файл .directory?
Скрытый файл .directory
создаётся графическим интерфейсом KDE (таким как Dolphin) и содержит настройки для отображения содержимого каталога. Это могут быть миниатюры, списки файлов или различные представления. Однако, когда мы производим очистку, часто эти файлы остаются, и они становятся практически бесполезными, если каталог больше не содержит других файлов.
Проблема создания пустых каталогов
После удаления файлов в каталогах мы сталкиваемся с «почти пустыми» каталогами, которые содержат лишь файл .directory
. Чтобы выявить и удалить такие каталоги, можно воспользоваться командой find
.
Использование команды find для удаления пустых каталогов
Команда find
в Linux позволяет находить файлы и каталоги по различным критериям. Для удаления пустых каталогов, включая те, которые содержат только файл .directory
, мы можем использовать следующий скрипт:
find . -type d \( -empty -delete -o -exec sh -c '
special=".directory"
test -f "$1/$special" &&
find "$1" -mindepth 1 -maxdepth 1 ! -name "$special" | { ! grep -q .; } &&
rm "$1/$special"
' find-sh {} \; -delete \) -print
Как работает этот скрипт?
- Обработка пустых каталогов: Скрипт сначала пытается удалить пустые каталоги с помощью опции
-empty -delete
. - Обработка не пустых каталогов: Если каталог не пустой, выполняется shell-команда. Это позволяет проверить, есть ли в каталоге файл
.directory
, и не содержатся ли в нем другие файлы. - Удаление файла .directory: Если
find
обнаруживает, что в каталоге есть только файл.directory
, он удаляется. - Удаление пустых каталогов: За тем идет попытка удалить сам каталог, если он стал пустым после удаления файла.
Примечания
- Данная команда удаляет только каталоги, если они действительно пустые, и не затрагивает
.directory
, если в каталоге находятся другие файлы. - Важно протестировать скрипт в безопасной среде, прежде чем запускать его на реальных данных, чтобы избежать случайного удаления нужных файлов.
Альтернативный метод: использование Python
Если вы предпочитаете более программный подход или хотите создать многократно используемое решение, можно использовать Python. Рассмотрим пример скрипта на Python, который удаляет файлы .directory
в случаях, когда каталог содержит только его:
#!/usr/bin/python
import os
import sys
if len(sys.argv) != 2:
print("usage: dir-remove path")
exit(1)
for root, dirs, files in os.walk(sys.argv[1]):
if files == ['.directory']:
os.unlink(os.path.join(root, ".directory"))
Заключение
Удаление пустых каталогов в Linux, особенно тех, которые содержат лишь файл .directory
, может значительно упорядочить файловую систему. Использование команды find
и написание простого скрипта на Python – это два подхода, которые помогут вам решить эту задачу. Не забудьте протестировать любое из предлагаемых решений в безопасной среде, чтобы избежать потери данных.