encontra flags: -exec rm -rf vs -delete

5

Eu achei que as bandeiras que mencionei na pergunta são as mesmas, mas recebo a seguinte mensagem com a primeira, mas nada com a última:

$ find . -mindepth 1 -type d -exec rm -rf {} \;
find: './practice4': No such file or directory
find: './practice10': No such file or directory
find: './practice7': No such file or directory
find: './practice9': No such file or directory
find: './practice1': No such file or directory
find: './practice5': No such file or directory
find: './practice3': No such file or directory
find: './practice6': No such file or directory
find: './practice2': No such file or directory
find: './practice8': No such file or directory

Perguntas extras que tenho são :, existe um código mais simples para excluir todos os subdiretórios? A ordem de exclusão é aleatória? Eu criei os diretórios usando

$ mkdir practice{1..10}
    
por Forethinker 20.02.2013 / 23:13

2 respostas

5

No manual de pesquisa do GNU:

If your find' command removes directories, you may find that you get a spurious error message whenfind' tries to recurse into a directory that has now been removed. Using the '-depth' option will normally resolve this problem.

Outras questões:

  • A simplicidade do comando depende da sua situação, que no caso listado seria: rm -rf practice* .
  • IIRC, a ordem de processamento dos arquivos depende do sistema de arquivos.
por 20.02.2013 / 23:22
3

Thor já explicou por que você está recebendo este erro e como corrigi-lo ao usar find .

Chamar find com -mindepth 1 é inútil, a menos que você tenha condições adicionais que não possam ser expressas em um script de shell. O que você está tentando fazer pode ser escrito

rm -rf */

contanto que o diretório atual não contenha nenhum diretório cujo nome comece com . (que não seria correspondido por * ) ou links simbólicos para diretórios (que o comando find exclui, mas o shell snippet acima inclui).

    
por 21.02.2013 / 02:05