Por que meu comando de encontro é executado duas vezes? -- and-line campo com bash campo com files campo com find camp askubuntu Relacionado O problema

Why does my find command get executed two times?


6
vote

problema

português

Eu quero recuperar arquivos específicos e cp o resultado em outro diretório. Tudo está funcionando, mas meu comando parece ser executado uma segunda vez.

Por exemplo, eu tenho um arquivo a e eu quero cp no subdiretório test/ , então eu executo:

  find . -mtime -1 -name a -exec cp {} test/ ';'    

meu arquivo é copiado para o subdiretório como eu queria, mas eu recebo esta mensagem de erro:

  cp: './test/a' and 'test/a' are the same file    
english

I want to retrieve specific files then cp the result into another directory. It is all working, but my command seems to be executed a second time.

For example, I have a file a and I want to cp it into subdirectory test/, so I run:

find . -mtime -1 -name a -exec cp {} test/ ';' 

My file is copied into the subdirectory as I wanted but then I get this error message:

cp: './test/a' and 'test/a' are the same file 
           
     
     

Lista de respostas

15
 
vote
vote
Melhor resposta
 

Você tem uma condição de corrida - primeiro find Encontre ./a e copia para test/a , então encontra o recém-copiado abcdefghijklmn3 e tenta copiá-lo novamente:

  $ find . -mtime -1 -name a -print -exec cp -v {} test/ ';' ./a './a' -> 'test/a' ./test/a cp: './test/a' and 'test/a' are the same file    

Você pode evitar que, contando find não descer para o diretório de destino ex.

  find . -path ./test -prune -o -mtime -1 -name a -exec cp {} test/ ';'    
 

You have a race condition - first find finds ./a and copies it to test/a, then it finds the newly copied ./test/a and tries to copy it again:

$ find . -mtime -1 -name a -print -exec cp -v {} test/ ';' ./a './a' -> 'test/a' ./test/a cp: './test/a' and 'test/a' are the same file 

You could avoid that by telling find not to descend into the target directory ex.

find . -path ./test -prune -o -mtime -1 -name a -exec cp {} test/ ';' 
 
 
   
   

Perguntas relacionadas

1  Eu usei o comando Localizar sem especificar um diretório  ( I used the find command without specifying a directory ) 
Eu usei este comando sem especificar um diretório: sudo find -type d -exec chmod 755 {} O que poderia ter acontecido? Eu estava na pasta / var / www /...

44  Encontre o arquivo mais recente por data modificada  ( Find the latest file by modified date ) 
se eu quiser encontrar o arquivo mais recente (mtime) em um diretório (grande) contendo subdiretórios, como eu faria isso? Lotes de postagens que eu encon...

34  encontrar vs. localize  ( Find vs locate ) 
Existem os comandos find e locate para procurar arquivos no disco. Eu sei que find Recursivamente processa todos os subdiretórios necessários para pes...

32  Como encontrar arquivos entre duas datas usando "Localizar"?  ( How to find files between two dates using find ) 
Eu tenho uma conta de e-mail que passou por 60 GB de e-mails, e atualmente estou tendo muitos problemas usando um cliente de e-mail para arquivar e-mails do a...

1  Bash: arquivo não encontrado  ( Bash file not found ) 
Está tudo na captura de tela abaixo ...

1  Criando um diretório de arquivos criados recentemente  ( Creating a directory of recently created files ) 
Em um sistema que eu tenho, os arquivos são carregados por meio de uma série de vários mecanismos em um diretório "recebendo" central. Uma vez por dia, esses ...

2  A mtime de um diretório pode ser mais antiga que a do arquivo dentro?  ( Can a directorys mtime be older than that of file inside ) 
Eu tenho essa pergunta muito boba e muito básica, mas eu pensei melhor perguntar antes de começar a podar minha NAS. Eu quero excluir todos os diretórios no...

1  Obtenha uma utilização de disco por tipo de arquivo?  ( Get disk utilization by file type ) 
Existe uma maneira de obter uma quebra de uma utilização de disco (ou diretório) com base no tipo de arquivo na linha de comando? Eu acho que eu poderia esc...

12  Como posso encontrar todos os arquivos de vídeo no meu sistema?  ( How can i find all video files on my system ) 
Eu tentei usar a pesquisa de arquivos de lente de unidade para *.* e filtragem por último modificado = tudo, digite = videos, e tamanho = tudo, mas não enco...

9  Tirando linhas de "acesso negado"  ( Taking out access denied lines ) 
Quando eu uso find para ver todos os arquivos PDF no diretório /home , estou vendo access denied . Para eliminá-los, tentei: find /home -iname "*.pdf" ...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.