В CakePHP есть соглашение о помещении файлов, называемых «пустыми», в пустые каталоги. Я уверен, что у них есть причина, но меня это действительно беспокоит. (Да, ОКР, я знаю ...)
Мне нужна однострочная команда оболочки linux, которая удалит каждый файл с именем «пустой» во всех дочерних каталогах. (Полагаю, было бы полезно указать подстановочные знаки и для более общего использования.)
Любые идеи?
Самый простой:
найти . -name empty -type f -exec rm -f {} \;
"." начинается в текущем каталоге, замените на путь к каталогу, если вы хотите выполнить его в другом месте.
«-type f» просто гарантирует, что это файл.
Краткое содержание:
Есть несколько вариантов:
find . -name empty -type f -exec rm -f {} \;
позвоню rm
один раз для каждого файла
find . -name empty -type f -exec rm -f {} +
позвоню rm
только так часто, как необходимо, создавая командную строку, которая использует максимально возможную длину
find . -name empty -type f | xargs rm -f
так же, как и выше, вы можете (или, скорее, будете, как указано выше - это был мой подход) столкнуться с проблемами с именами файлов, которые содержат символы, которые требуют цитирования
find -name empty -type f -print0 | xargs -0 rm -f
наверное лучшее решение Пожалуйста, проголосуйте за комментарий Дэна Си, это его решение. Это будет, как и в предыдущем вызове фрагмента rm
только так часто, как необходимо, создавая командную строку, которая использует максимально возможную длину, -0
переключатель означает, что аргументы rm
команда будет разделена \0
так что экранирование выполняется прямо в оболочке.
Замечание о комментарии, который нужно ограничить с помощью -type f
вы также можете ограничить -size 0
(ровно 0 байт) Я не могу проверить, действительно ли CakePHP соблюдает это соглашение, но почти каждый известный мне проект, который использует файлы-заполнители для проверки пустых каталогов в исходных репозиториях, делает это.
Также, как отмечает Мэтт Саймонс, добавление -v
flag может быть хорошим вариантом, чтобы увидеть некоторый прогресс, однако обратите внимание, что это определенно замедлит весь процесс. Лучшим подходом может быть отслеживание процесса с помощью strace -p $pid_of_xargs
(добавьте дополнительные параметры, если вы хотите следить за дочерними процессами, это возможно)
Еще одно примечание, которое я только что нашел на странице руководства:
find -name empty -type f -delete
в конце концов, у find есть все, что встроено :)
Возможная причина, по которой cakePHP может это сделать, заключается в том, что некоторые системы контроля версий (например, Mercurial и Git) не могут отслеживать пустые каталоги.
Это может сделать:
rm -f $(find /var/www -name empty -print)
По умолчанию находить рекурсии.