web-dev-qa-db-fra.com

SFTP: Déplacer (renommer) de nombreux fichiers d'un dossier à un autre (pas un par un)

J'ai besoin de déplacer tous les fichiers de actuel_path sur actuel_path/DestinationFolder.

La version de SFTP que j'utilise est la suivante: version 2 de protocole SFTP

Les commandes disponibles sont:

sftp> help
Available commands:
cd path                       Change remote directory to 'path'
lcd path                      Change local directory to 'path'
chgrp grp path                Change group of file 'path' to 'grp'
chmod mode path               Change permissions of file 'path' to 'mode' 
chown own path                Change owner of file 'path' to 'own'
help                          Display this help text
get remote-path [local-path]  Download file
lls [ls-options [path]]       Display local directory listing
ln oldpath newpath            Symlink remote file
lmkdir path                   Create local directory
lpwd                          Print local working directory
ls [path]                     Display remote directory listing
lumask umask                  Set local umask to 'umask'
mkdir path                    Create remote directory
put local-path [remote-path]  Upload file
pwd                           Display remote working directory
exit                          Quit sftp
quit                          Quit sftp
rename oldpath newpath        Rename remote file
rmdir path                    Remove remote directory
rm path                       Delete remote file
symlink oldpath newpath       Symlink remote file
version                       Show SFTP version
!command                      Execute 'command' in local Shell
!                             Escape to local Shell
?                             Synonym for help

Je n'ai pas mv commande. J'ai essayé RNFT et n'a pas fonctionné.

Maintenant, je peux utiliser Rename:

 rename current_path/myFile.txt current_path/DestinationFolder/myFile.txt

et ça va bien. Mais j'ai besoin de bouger tout (ou plusieurs) des fichiers. Ce qui suit n'a pas fonctionné:

 rename current_path/* current_path/DestinationFolder/

Couldn't rename file "current_path/*" to "current_path/DestinationFolder/": Bad message

N'ayez pas accès à SSH Donc, je ne peux donc pas faire des choses comme Echo "SSH Login @ Server MV * Current_Path/DestinationFolder /"

Je ne devrais pas gâcher avec ce serveur c'est: pas de scripts, aucune activité, etc. Je suis très limité.

Pourriez-vous me recommander un moyen de résoudre ce problème, s'il vous plaît ??

[~ # ~] note [~ # ~ ~]: Ceci est à Solaris.

7
Kani

je suis d'accord avec CJC. Si vous êtes vraiment limité au-dessus de la commande qui vous permettra de télécharger des fichiers est placée à la page locale [Remote-Chemin] et SCP IT Retour. Bon lien ici aussi.

J'utiliserais quelque chose comme winscp cependant, rend les choses beaucoup plus faciles.

sftp> help put
USAGE: put local-path [remote-path] [-bg | -fg] [-s] [-o] [-r] [-b | -lf]
DESCRIPTION: Upload file.
PARAMETERS:
 -bg   Start (queue) transfer in background.
 -fg   Start transfer in foreground.
 -s    Include subdirectories (recursive).
 -r    Force existing incomplete file to be resumed.
 -o    Force existing file to be overwritten.
 -b    Upload all files as binary; no conversions.
 -lf   Use auto detection upload mode. Text files are uploaded
       in Unix format, with LF as the line delimiter.

NOTES:
 -     If both '-r' and '-o' are specified, resume is tried first,
       and if that fails, overwrite is used.
 -     '-std' and '-t' transfer mode options are also available
       when SFTP version 4 or higher is in use.
2
Sc0rian

Openssh sftp n'est pas un client très puissant pour de telles tâches. Vous devriez l'exécuter deux fois. Commencez par collecter la liste des fichiers, utilisez la liste pour générer une liste de commandes et exécuter celles de la deuxième série.

Quelque chose comme ça:

files=`sftp -b - [email protected] <<EOF
cd /source/folder
ls
EOF`
files=`echo $files|sed "s/.*sftp> ls//"` 

(
  echo cd /source/folder
  for file in $files; do
    echo get $file
    echo rename $file /destination/folder/$file
  done
) | sftp -b - [email protected]

Avant d'exécuter le script sur les fichiers de production, je vous suggère, vous émettez d'abord la liste de commandes générée à un fichier à vérifier si les résultats sont comme prévu.

Il suffit de remplacer la dernière ligne avec:

) > commands.txt
2
Martin Prikryl