Arquivos Cp no subdiretório com find -exec

2

Por que esse comando não copia os arquivos 17 .png em um subdiretório dentro do diretório atual?

$ find . -maxdepth 1 -mtime -3 | wc -l
17
$ find . -maxdepth 1 -mtime -3 -print0 | grep -z loader | xargs -r0 cp -t ./user_name_tutorial/
$ find . -maxdepth 1 -mtime -3 -print0
../Plugins.png./Screenshot from 2015-08-06 22:30:56.png./Screenshot from 2015-08-06 22:28:21.png./Plugins_ex-in-post.png./Screenshot from 2015-08-06 22:31:14.png./Pages_visit_site.png./user_name_tutorial./Page_edit.png./Screenshot from 2015-08-06 22:28:52.png./Page_edit-visual.png./Plugins-google-maps_v2-example.png./Screenshot from 2015-08-06 22:29:27.png./Plugin_google_apps.png./Screenshot from 2015-08-06 22:30:44.png./Media_uploads.png./Plugins_add_new.pnguser_name@COMP_NAME-X:~/Pictures$ 
    
por phillipsk 10.08.2015 / 03:03

1 resposta

4

Você está nos mostrando a saída de

find . -maxdepth 1 -mtime -3 -print0

Qual é a saída de

find . -maxdepth 1 -mtime -3 -print0 | grep -z loader

Não vejo nenhum nome de arquivo contendo a palavra loader na saída que você mostrou. Se a saída do grep (que é a entrada para xargs ) não é nada, então, naturalmente, nada será copiado.

Além disso,

  • Em vez de find … | grep foo , você pode dizer find … -name "*foo*" e salvar um processo.
    Exceto:

    I notice that you used -maxdepth 1, which (as you know) restricts the search to the current directory.  Without that, find would look into subdirectories, and find … | grep foo would give you all files in any subdirectory named food_fight, football, or pound_foolish, regardless of the file's name, since the grep would be looking at the entire (.-relative) pathname, rather than just the filename.

  • -maxdepth 1 não impede que find do relatório os nomes dos subdiretórios no diretório atual - Então, se você tivesse um subdiretório chamado loader (ou other_loader_files ), seu nome seria passado para cp - o que seria apenas uma mensagem de erro, já que você não disse cp -r , mas pode haver situações semelhantes em que você pode pegá-lo de surpresa e fazer algo desagradável.
  • Você pode evitar o problema acima (potencial) dizendo -type f .
  • Eu percebo que você usou -mtime -3 , que (como você sabe) restringe a pesquisa com base na data de modificação. Observe que, se você não estava usando um teste de restrição de pesquisa como -mtime -3 ou -type f , usar find … -maxdepth 1 é praticamente equivalente a usar um curinga (comumente conhecido como "glob" ou um padrão de expansão de nome de arquivo), como em

    cp -t ./user_name_tutorial/ *loader*
    

    ou

    cp *loader* ./user_name_tutorial/
    
por 10.08.2015 / 04:34

Tags