“Coletando” arquivos para processamento adicional

1

Embora provavelmente seja uma boa oportunidade para usar apenas um gerenciador de arquivos como o Midnight Commander, gostaria de saber se existe uma maneira elegante de fazer isso a partir do shell:

Digamos que eu queira copiar um arquivo de um diretório para outro. O diretório é enorme e tem nomes de arquivos longos, complicados ou mesmo parcialmente enigmáticos. Eu não sei o nome exato, só que contém penguin .

  1. Primeiro faço uma pesquisa find . -iname "*penguin*" | less

  2. Eu vejo os resultados:

    ./l1fe_of_Penguins
    ./Fw0rld_Of_penguins
    ./FUnNy_penguin
    
  3. Eu quero copiar o arquivo "pinguim engraçado". Então eu lembro de algumas partes relevantes do nome do arquivo intricado e digite o comando shell, como

    cp FUn*penguin /media/share
    

Como eu poderia fazer isso mais rápido? Como posso, no modo todo-texto, obter o nome do arquivo dos resultados da pesquisa como um argumento de linha de comando?

    
por wolf-revo-cats 10.02.2017 / 02:26

4 respostas

2

Você pode usar a tecla TAB para concluir automaticamente os caminhos do sistema de arquivos para a maioria dos shells.

o bash suporta isso e um pouco mais.

O shell mais interativo que eu já vi é o zsh, com um arquivo de configuração customizado como configuração do zsh do grml e oh-my-zsh .

Com o zsh, você pode fazer o autocomplete com globs e até mesmo completar vários arquivos de uma só vez.

Sem saber que sabor do Unix ou do Linux você está usando, o melhor que posso dizer é verificar seu repositório de software ou compilar o zsh por conta própria.

Assumindo o Linux devido à sua menção a pinguins, verifique com o seu gerenciador de pacotes o seguinte:

zsh

E para arquivos rc avançados que permitem suporte a muitas coisas legais no shell

grml-zsh-config
oh-my-zsh
    
por 10.02.2017 / 03:12
2

Eu encontrei uma maneira de fazer isso:

find . -iname "*penguin*" | pick | xargs -J % cp -i % /media/share
    
por 10.02.2017 / 03:27
-1

usando -exec option find também pode executar um comando, ou seja:

find . -iname "*penguin*" -exec cp {} /media/share \;

onde {} é substituído por um nome.

entre. man find é ótimo! :)

    
por 10.02.2017 / 02:45
-2

você pode tentar isso.

remova o comando echo, assim que estiver satisfeito com a saída

find . -iname "*penguin*" | awk '/penguin$/' | while read filename
do
    echo "cp ${filename} /media/share"
done
    
por 10.02.2017 / 02:42

Tags