Назад | Перейти на главную страницу

Как переместить набор файлов на один FTP-сервер?

На удаленном FTP-сервере у меня есть набор файлов в каталоге remote.dir1. Я хотел бы переместить все файлы в этом каталоге в remote.dir2.

Я использую lftp и пробовал что-то вроде этого:

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

Не работает и отображает: Access failed: 550 remote.dir1/*: The filename, directory name, or volume label syntax is incorrect.

Я также пробовал:

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

который отображает сообщение об использовании: Usage: mv <file1> <file2>

Однако перемещение одного файла работает: lftp> mv remote.dir1/file1 remote.dir2/

В крайнем случае, мы можем создать файл, содержащий набор lftp mv команды и source Это.
Есть ли какие-то решения, о которых я не знаю?
Или есть какие-либо инструменты командной строки для этой задачи?

Изменить: я ограничен средой FTP, поэтому из-за ограничений среды приемлемы только решения, использующие FTP.

Похоже, что lftp поддерживает только glob синтаксис с командами, принимающими один аргумент, поэтому mv, для которого требуется два, отсутствует.

С FTP ваш сервер мощь разрешить расширенные команды, особенно выполнение ограниченного набора команд через SITE EXEC или аналогичным способом - проверьте документацию FTP-сервера, его справку (SITE HELP) или баннер входа. Однако они не стандартизированы, поэтому, если решение должно быть независимым от FTP-сервера, создание сценариев на основе вывода списка файлов кажется лучшей идеей.

В целях документации я опубликую шаги, которые использовал для выполнения задачи. Приветствуются любые лучшие решения. ;-)

Заметка: это решение использует lftp FTP-клиент. Возможно, вам придется установить его на свой компьютер, прежде чем вы сможете продолжить.

Решение:

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

Или один лайнерTM:

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

rsync отлично подходит для перемещения файлов с одной машины на другую (или даже между одной машиной).

rsync -avz -e "ssh -i /key/path/key.rsa" user@1.2.3.4:/path/on/remote/server/ /path/on/local/server

Эта команда предоставляет закрытый ключ и подключается к машине. Он захватывает файлы из удаленного каталога и копирует их в локальный каталог. Вы также можете сделать обратное, переключив источник и место назначения.

Немного поздно на вечеринке, но в июле 2017 года в lftp была добавлена ​​команда «mmv».

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

Итак, в вашем случае:

mmv remote.dir1/* remote.dir2/

Я думал, что FTP более или менее мертв. Прошло почти 5 лет с тех пор, как я использовал его, и он был на выходе 10 лет назад.

Тем не менее, я всегда находил семейство инструментов командной строки ncftp очень дружелюбным, и я ожидаю, что это «просто сработает».

Я не собираюсь настраивать FTP-сервер для проверки этого, но попробую. В ncftp есть еще много чего, что может понравиться (по крайней мере, начиная с версии 2).