На удаленном 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).