Como mover um conjunto de arquivos no mesmo servidor FTP?

5

No servidor FTP remoto, eu tenho um conjunto de arquivos no diretório remote.dir1 . Eu gostaria de mover todos os arquivos desse diretório para remote.dir2 .

Estou usando lftp e estava tentando algo assim:

lftp> mv remote.dir1/* remote.dir2/

Não funciona e exibe: Access failed: 550 remote.dir1/*: The filename, directory name, or volume label syntax is incorrect.

Eu também tentei:

lftp> glob -a mv remote.dir1/* remote.dir2/

que exibe a mensagem de uso: Usage: mv <file1> <file2>

No entanto, o movimento de um único arquivo funciona: lftp> mv remote.dir1/file1 remote.dir2/

Como último recurso, podemos construir um arquivo contendo um conjunto de comandos lftp mv e source it.
Existem soluções que não conheço?
Ou existem ferramentas de linha de comando para a tarefa?

Editar: Estou restrito ao ambiente FTP, portanto, apenas as soluções que usam o FTP são aceitáveis devido à restrição ambiental.

    
por cychoi 21.08.2013 / 09:03

5 respostas

3

Para fins de documentação, vou postar as etapas que usei para concluir a tarefa. Quaisquer soluções melhores são muito apreciadas. ; -)

Nota : esta solução usa o cliente lftp FTP. Você pode ter que instalá-lo em sua máquina antes de prosseguir.

Solução:

lftp> renlist remote.dir1/ | "sed 's/\(.*\)/mv \"\" \"remote.dir2\/\"/'" > list  
lftp> source list  
lftp> !rm list  

Ou o one-liner TM :

lftp> renlist remote.dir1/ | "sed 's/\(.*\)/mv \"\" \"remote.dir2\/\"/'" > list && source list && !rm list
    
por 21.08.2013 / 10:20
3

Parece que o lftp suporta apenas a sintaxe glob com comandos aceitando um único argumento, então mv , que requer dois, está fora.

Com o FTP, seu servidor pode permitir comandos estendidos, especialmente a execução de um conjunto limitado de comandos via SITE EXEC ou meios similares - verifique a documentação do servidor FTP, sua ajuda ( SITE HELP ) ou o banner de login. No entanto, eles não são padronizados, portanto, se a solução precisar ser independente do servidor de FTP, a criação de scripts com base na saída da lista de arquivos parece ser a melhor ideia.

    
por 21.08.2013 / 10:24
0

O rsync é ótimo para mover arquivos de uma máquina para outra (ou até mesmo entre a mesma máquina).

rsync -avz -e "ssh -i /key/path/key.rsa" [email protected]:/path/on/remote/server/ /path/on/local/server

Esse comando fornece uma chave privada e se conecta a uma máquina. Ele pega arquivos do diretório remoto e copia-os para o diretório local. Você também pode fazer o inverso disso trocando a origem e o destino.

    
por 21.08.2013 / 09:45
0

Um pouco atrasado para a festa, mas em julho de 2017 o comando "mmv" foi adicionado ao lftp.

Usage: mmv [OPTS] <files> <target-dir>
Move <files> to <target-directory> with wildcard expansion
 -O <dir>  specifies the target directory (alternative way)

Então, no seu caso:

mmv remote.dir1/* remote.dir2/
    
por 06.10.2017 / 11:22
-1

Eu achei que o FTP estava mais ou menos morto. Já faz quase 5 anos desde que eu usei, e estava fora há 10 anos.

Dito isso, sempre achei a família ncftp de ferramentas de linha de comando muito amigável, e espero que isso "funcione".

Não configurarei um servidor FTP para verificar isso, mas experimente. Há muito mais sobre o ncftp (pelo menos a partir da versão 2).

    
por 21.08.2013 / 11:11