Localiza arquivos e echo conteúdo no shell

2

Estou tentando pesquisar todos os arquivos dentro de um diretório pelo nome e exibindo o conteúdo dos arquivos no shell.

Atualmente, estou recebendo apenas uma lista de arquivos

find -name '.htaccess' -type f


./dir1/.htaccess
./dir23/folder/.htaccess
...

Mas como posso produzir o conteúdo de cada arquivo? Pensei em algo como canalizar o nome do arquivo para o cat -command.

    
por pbaldauf 18.01.2017 / 16:44

3 respostas

6

Use cat dentro do predicado -exec de find :

find -name '.htaccess' -type f -exec cat {} +

Isto irá mostrar o conteúdo dos arquivos, um após o outro.

    
por 18.01.2017 / 16:52
2

Consulte a página de manual para find ( man find ).

-exec utility [argument ...] ;
         True if the program named utility returns a zero value as its exit
status. Optional arguments may be passed to the utility. The expression must be
terminated by a semicolon ('';'').  If you invoke find from a shell you may need
to quote the semicolon if the shell would otherwise treat it as a control
operator. If the string ''{}'' appears anywhere in the utility name or the
arguments it is replaced by the pathname of the current file.  Utility will be
executed from the directory from which find was executed. Utility and arguments
are not subject to the further expansion of shell patterns and constructs.

-exec utility [argument ...] {} +
         Same as -exec, except that ''{}'' is replaced with as
many pathnames as possible for each invocation of utility.  This behaviour is
similar to that of xargs(1).

Então, apenas coloque a chave na opção -exec .

find -type f -name '.htaccess' -exec cat {} +
    
por 18.01.2017 / 16:54
1

Você provavelmente deseja usar a opção -exec de find .

find -name some_pattern -type f -exec cat {} +

Além disso, se todos eles forem texto simples e você quiser visualizá-los um por um, substitua cat por less (ou view do vim)

find -name some_pattern -type f -exec less {} +

Para ver & editar, use vim ou emacs ou gedit (por sua própria opção)

find -name some_pattern -type f -exec vim {} +
    
por 19.01.2017 / 03:30

Tags