Procura / grep ftp nomes de arquivos remotos

5

Já vi Como executar o grep no FTP? - essa questão implica que é necessário um grep no conteúdo do arquivo remoto; e, como tal, a resposta é que o protocolo ftp não suporta isso (o download de todos os arquivos remotos localmente é necessário, antes que uma pesquisa em seu conteúdo possa ser iniciada).

Estou procurando algo um pouco mais "simples" - gostaria apenas de pesquisar / procurar nomes de arquivos remotos; Eu imagino que isso requer que a árvore de diretórios remotos seja baixada de alguma forma. Como eu poderia fazer isso através da linha de comando?

    
por sdaau 02.03.2014 / 19:10

2 respostas

4

Aqui está uma maneira - usando o GNU ftpsync .

Observe que os links para download no link parecem estar quebrados a partir de agora; a página que você precisa é link ... Parece que eu entendi isso via git, provavelmente pelo endereço:

git clone git://git.sv.gnu.org/ftpsync.git

Observe que ftpsync é um script Perl, no diretório src/ deste repositório. (Observe também que há uma ferramenta diferente, ftpsync.py em Python, encontrada em ftpsync2d - Hospedagem do Google Project )

De qualquer forma, o truque é simplesmente tentar sincronizar a árvore de FTP remota com um diretório local vazio, enquanto definimos ftpsync para o modo de informação ( -i ) (para que nenhuma ação de download real seja executada) e modo. No entanto, observe que o modo detalhado ( -v ) parece estar com bugs (eu recebo mesmo menos saída para stdout do que se eu não usar -v ); Então, abaixo eu usei -d para o modo de depuração, que parece funcionar como anunciado.

Por fim, faço isso:

$ mkdir /tmp/test
$ cd /tmp/test
$ /path/to/ftpsync-git/src/ftpsync -d -i ftp://user:[email protected]/www .   2>&1 | tee _ftpsync_.log

Building remote tree ftp://[email protected]/www
Detecting if passive needed... Passive
Logging in as user.
Sync file /tmp/Q44CbrEGUU => Q44CbrEGUU
Localtime before 1393782144, Remote 1393782120, after 1393782144
Clock sync offset: 0h00m00s
Dir:  in www
Mod:1327878000 Size:737 .htaccess
Mod:1237503600 Size:241 .hiddenfile
Dir: stuff in www
...
Mod:1353452400 Size:4812800     somefile

Building local tree of .
Dir: 
Mod: Size:      
Died at /path/to/ftpsync-git/src/ftpsync line 1011.

Depois que esse processo estiver concluído, você deverá ter uma lista de todos os arquivos e diretórios em www/ no servidor remoto, localmente em _ftpsync_.log - assim, mais tarde você pode percorrer este arquivo para procurar nomes de arquivos e subdiretórios remotos nomes.

Bem, ainda gostaria de saber se existem ferramentas alternativas para fazer isso ...

Espero que isso ajude alguém,
Felicidades!

    
por 02.03.2014 / 19:10
2

Nos sistemas UNIX, normalmente o Perl já está instalado e o Net :: FTP é um módulo Perl CORE, por ex. também está instalado. Então você poderia fazer sem software adicional (o grep está na última linha):

perl -MNet::FTP -e '
    $ftp = Net::FTP->new(q[ftp.example.com]) or die $!; 
    $ftp->login(q[ftp],q[user@host]) or die $ftp->message; 
    $ftp->cwd(q[pub/whatever]) or die $ftp->message;
    print "$_\n" for grep { /pattern/ } $ftp->ls
'
    
por 02.03.2014 / 20:17