Usando 'find' na linha de comando

1

O computador está executando o Yosemite. Eu estava tentando mover alguns documentos da pasta de download para documentos através da linha de comando usando

find . -iname '*.pdf' -exec mv "{}" ./Documents \

A resposta dada respondeu quase tudo. Eu só estou querendo saber agora o que acontece com os arquivos movidos. Eles estão na pasta Documentos dos usuários raiz?

    
por Hadoken 20.09.2016 / 20:37

3 respostas

1

O comando pode ser melhor como segue.

find ~/Downloads -iname "*.pdf" -exec mv '{}' ~/Documents \;

Observe o ponto e vírgula após a barra invertida. Ou melhor também da seguinte forma.

find ~/Downloads -iname "*.pdf" -exec mv '{}' ~/Documents +

Observe o sinal de mais usado em seu lugar.

Ou até mesmo como segue.

find ~/Downloads -iname *.pdf -exec mv {} ~/Documents +

As aspas simples em torno de {} são usadas para dizer ao shell para não interpretar os caracteres entre aspas como qualquer tipo de pontuação de shell. Eles normalmente não são necessários, mas usar aspas simples não é um mau hábito. Até onde sei, é apenas fish que expande {} para outra coisa. Os caracteres {} basicamente representam a lista de arquivos encontrados.

As aspas duplas em torno do parâmetro iname também não são necessárias, mas também não é um mau hábito usá-las.

O comando na questão usa o caractere de continuação, então pressionando Enter depois ele deve ter fornecido apenas outra linha na qual você poderia continuar a digitar. Então, o que mais foi digitado depois desse comando, ou você acabou de esquecer de digitar o ponto-e-vírgula na pergunta? Se o comando foi digitado como um usuário comum, então os arquivos PDF ainda podem estar em seu diretório pessoal em algum lugar.

Teria sido mais útil abrir o Terminal e digitar man find . Em seguida, consulte a seção Exemplos para notas de uso que teriam coberto esse cenário.

Para encontrar todos os arquivos PDF no seu sistema:

cd && find / -iname "*.pdf" 1>found.txt

Isso criará uma lista, found.txt, de todos os arquivos PDF que a conta de usuário regular tem permissão para listar. Não sei se há informações suficientes para responder onde os arquivos ausentes foram enviados.

    
por 20.09.2016 / 21:45
2

Para mover arquivos, você não precisa encontrá-los primeiro. Você poderia apenas fazer:

mv *.pdf ../Documents

Se você insistir em usar o find:

find . -iname '*.pdf' -exec mv {} ../Documents \;

Aqui, o último "\" é para escapar de caracteres como ";" para que o shell funcione corretamente.

    
por 20.09.2016 / 21:22
1

Eu suponho que você está usando "find" porque você tem arquivos PDF em subdiretórios ou você apenas usaria "mv * .pdf ../Documents". Primeiro eu faria o seguinte, apenas para ter certeza de que o comando está fazendo o que eu quero.

find . -type f | grep dat$

Então eu preencheria o resto do comando com xargs

find . -type f | grep dat$ | xargs mv ../Documents

Por uma questão de hábito, eu gosto de colocar "grep" e "xargs" nas extremidades dos comandos, onde eu já sei a saída e o que eles estão fazendo.

    
por 20.09.2016 / 21:56