find também procuraria no diretório lcommand por quaisquer instâncias dos arquivos pdf. Como os arquivos foram copiados, os arquivos pdf foram copiados para o diretório; find veio com o aviso.
Estou tentando aprender sobre o comando find
. Eu gostaria de entender o significado deste aviso:
ankit@battlestar:/home/mount_150/studies$ find -iname "*.pdf" -exec cp -ar {} lcommands/ \;
cp: './lcommands/june.pdf' and 'lcommands/june.pdf' are the same file
cp: './lcommands/cde.pdf' and 'lcommands/cde.pdf' are the same file
cp: './lcommands/abc.pdf' and 'lcommands/abc.pdf' are the same file
ankit@battlestar:/home/mount_150/studies$ ls -l lcommands/
Você pode ver aqui o procedimento que eu segui e a estrutura do diretório:
find também procuraria no diretório lcommand por quaisquer instâncias dos arquivos pdf. Como os arquivos foram copiados, os arquivos pdf foram copiados para o diretório; find veio com o aviso.
A resposta do Ankid foi aceita, mas está errada. Sim, o find também pesquisa o diretório lcommands
, mas como você pode ver na parte de captura de tela antes de localizar, o diretório lcommands
já contém os três arquivos pdf antes do comando find ser emitido.
O que realmente acontece: find -exec cp
resulta em um comando cp ./lcommands/abc.pdf lcommands/
. Como ./lcommands é exatamente o diretório lcommands
( ./
é o mesmo que ././
, o mesmo que ./././././
, o mesmo que o diretório em que você está), isso resultaria em copiar abc.pdf
over propriamente dito, que cp
recusa, porque isso resultaria em um arquivo de destino danificado (pelo menos para arquivos maiores que cp
do buffer é longo).
Imagine como cp
funciona: ele abre o arquivo de origem, lê um trecho, abre o arquivo de destino (truncando-o se existir e não está vazio), grava o trecho de leitura anterior no arquivo de destino; em seguida, ele leria o próximo bloco do arquivo de origem, mas qualquer coisa, exceto o primeiro fragmento, desaparecerá devido à operação de truncamento anterior. Portanto, os autores de cp
tentaram detectar qualquer situação em que os arquivos de origem e de destino são os mesmos.
cp
não está reclamando, que o arquivo já está lá - seria feliz substituí-lo! Exceto que você também usou a opção -i
ou -n
. Então a resposta do jpic está correta - mesmo que possa não ser muito detalhada e, portanto, não o ajudou.
O mesmo com os outros dois arquivos pdf.
Para torná-lo o mais claro possível: cp
não reclama porque o (s) arquivo (s) de destino existe (s), mas porque é (são) exatamente o (s) arquivo (s) de origem. E é exatamente isso que a mensagem de erro diz.
É um erro (código de retorno 1), de cp :
>>> cp foo foo
cp: 'foo' and 'foo' are the same file
<<< 11:33.40 Sat Aug 04 2012!~
1
O que significa que o cp não fez nada.