Não entende onde os arquivos foram movidos por find + exec

0

Eu queria copiar todos os meus pdfs para uma pasta pdf, pois usei esse comando find com a opção -exec . Antes de começar, criei uma pasta chamada pdf nesta pasta atual

sudo find . -type f -iname "*.pdf" -exec mv {} /pdf \;

Os pdfs sumiram, mas não onde eu esperava. Também não há pasta / pdf eu pensei lá eles poderiam ser. Há uma pasta pessoal em / pdf

-rw-r--r--@   1 myusername  staff   9,9M 19 Aug 19:53 pdf

Alguma ideia?

    
por Al Phaba 18.12.2016 / 02:14

2 respostas

5

O diretório de destino para o mv que você forneceu como /pdf , você deve ter usado ./pdf . Como não havia diretório (pasta) chamado pdf no diretório de nível superior / , mas como você era root , mv movia cada um dos arquivos movidos para o arquivo %código%. O único arquivo recuperável agora é chamado /pdf e foi o último processado por /pdf .

Como um aparte, quando eu mv , eu SEMPRE uso a opção sudo find para --target-directory e executo o find com mv primeiro, para garantir que ele faça o que eu quero, assim:

# NOTE: This demonstrates a FAIL
sudo find . -type f -iname '*.pdf' -exec echo mv --target-directory=/pdf {}  \;

Mas eu provavelmente faria assim:

mkdir ./pdf
find . -type f -iname '*.pdf' -print0 | xargs -0 mv --target-directory=./pdf

echo mostrará uma mensagem de erro se o argumento para mv não existir.
Eu uso --target-directory emparelhado com find -print0 para lidar com nomes de arquivos contendo espaços e outros caracteres bobos.

    
por waltinator 18.12.2016 / 02:44
5

Isso não é uma pasta. As pastas aparecem com d na frente das outras permissões na extrema esquerda. Você veria algo como drwx-r-xr-x se fosse uma pasta.

Em vez disso, você renomeou cada arquivo /pdf . Renomear um arquivo para um nome que já existe exclui o arquivo original. Isso significa que você excluiu seus arquivos, exceto o último que você renomeou.

Outra questão relacionada trata da recuperação dos PDFs perdidos.

    
por Chai T. Rex 18.12.2016 / 02:38