O mais simples é:
encontre. -name empty -type f -exec rm -f {} \;
"." inicia no diretório atual, substitua por um caminho de diretório se você quiser executá-lo em outro local.
"- tipo f" apenas garante que seja um arquivo.
O CakePHP tem uma convenção de colocar arquivos chamados "vazios" em diretórios vazios. Tenho certeza de que eles têm uma razão, mas isso realmente me incomoda. (Sim, TOC, eu sei ...)
Eu quero um comando linux shell de uma linha que irá deletar todos os arquivos com o nome "empty" em todos os diretórios descendentes. (Eu suponho que seria útil poder especificar curingas para um uso mais geral também.)
Alguma idéia?
Resumo resumido:
Existem várias opções:
find . -name empty -type f -exec rm -f {} \;
chamará rm
uma vez para cada arquivo
find . -name empty -type f -exec rm -f {} +
chamará rm
somente quantas vezes forem necessárias construindo uma linha de comando que use o comprimento máximo possível
find . -name empty -type f | xargs rm -f
mesmo que acima, você pode (ou melhor, como acima - que foi minha abordagem) encontrar problemas com nomes de arquivos que contenham caracteres que precisam ser citados
find -name empty -type f -print0 | xargs -0 rm -f
é provavelmente a melhor solução Por favor, comente o comentário de Dan C, é a sua solução . Ele será como a chamada de fragmento anterior rm
apenas quantas vezes for necessário construindo uma linha de comando que use o comprimento máximo possível, a opção -0
significa que os argumentos para o comando rm
serão separados por
, escapar é feito diretamente no shell. -type f
Em uma nota sobre o comentário a restringir usando -size 0
você também pode restringir com -v
(exatamente 0 bytes) Eu não posso verificar se o CakePHP realmente adere a essa convenção, mas apenas sobre cada projeto eu sei que usa arquivos de espaço reservado para verificar diretórios vazios nos repositórios de origem.
Além disso, Matt Simons ressalta que adicionar uma strace -p $pid_of_xargs
flag pode ser uma boa opção para ver algum progresso, mas note que isso definitivamente irá desacelerar todo o processo. Uma abordagem melhor pode ser seguir o processo usando %code% (adicionar opções adicionais se você quiser seguir processos filhos, afaik que é possível)
Outra nota que encontrei na página do manual:
find -name empty -type f -delete
depois de tudo encontrar tem tudo isso embutido:)
Uma possível razão pela qual o CakePHP pode fazer isso é porque alguns sistemas de controle de versão (por exemplo, Mercurial e Git) não podem rastrear diretórios vazios.
Isso pode ser feito:
rm -f $(find /var/www -name empty -print)
Encontrar recurses por padrão.