find exec mv encontra um inode (dir), altera o nome do diretório, mas retorna “No such file or directory”

1

O seguinte comando find-exec(mv) encontra um diretório chamado prog-3.6.9-stable-gnu e altera seu nome com sucesso. No entanto, o comando também retorna:

find: './prog': No such file or directory

Este é o comando:

find ./ -type d -name 'prog-*' -exec mv {} prog \;

Eu recebo um resultado semelhante quando find-exec(rm) desse diretório:

Dado o comando find vem antes do executável de trabalho descompactar (ou exec rm -rf para esse assunto) Eu quero perguntar por que eu teria esse stderr? Quer dizer, se o arquivo foi encontrado e foi alterado, por que o stderr seria "Nenhum arquivo ou diretório"?

    
por JohnDoea 04.01.2017 / 16:30

1 resposta

3

O erro aparece porque você está movendo uma pasta " prog-* ".
O comportamento real de find é:

find analyzes first the directory itself, and then its contents.

Então, find , no seu exemplo:
 1. encontra o diretório prog-3.6.9-stable-gnu
 2. renomeia em prog (agora tem um novo nome)
 3. tenta acessar prog-3.6.9-stable-gnu
 4. devolve um erro porque agora não é possível encontrar a pasta prog-3.6.9-stable-gnu

A ordem de

encontrar de analisar primeiro o diretório e, em seguida, o seu conteúdo, é conhecida como "largura de banda inicial". O oposto é "profundidade em primeiro percurso". Existe uma opção -depth que invoca isso. É interessante ler as menções de -depth na página man do find (1) .

  • " -depth : Processe o conteúdo de cada diretório antes do próprio diretório."
  • "A ação -delete também implica -depth ."
  • "Não se esqueça de que a linha de comando de localização é avaliada como uma expressão, portanto, colocar -delete primeiro fará com que você tente excluir tudo abaixo dos pontos iniciais especificados."
  • "Ao testar uma linha de comando de localização que você pretende usar com -delete , você deve especificar explicitamente -depth para evitar surpresas posteriores."
  • "Como -delete implica em -depth , você não pode usar utilmente -prune e -delete juntos".
por 04.01.2017 / 17:03