Как удалить несколько файлов с помощью sftp

13

Этот пост посвящен удалению нескольких файлов с удаленного сервера, когда устанавливается sftp-пароль без подключения. У меня есть код, как показано ниже. Только первый файл в переменной $file_listудаляется, когда переменная установлена ​​как,

$file_list="file1 file2"

sftp $USER@$HOST
rm $file_list
quit
SFTP-Session

Я даже пытался выполнить команды в режиме подсказки.

sftp $USER@$HOST
rm file1 file2

Тем не менее, я все еще вижу, что только file1 удаляется.

Я не уверен, что мне не хватает какой-либо основной команды. Я попытался mdelete/ mdel/ mrm, которые были отклонены как недопустимая команда в окне приглашения sftp.

bhawna
источник

Ответы:

8

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

#!/bin/bash
# set variables
USER="username"
HOST="hostname"
file_list="file1 file1 file3 file4"
# delete each file
for file in $file_list; do
    echo "rm $file" | sftp $USER@$HOST
done
exit 0

Этот однострочник намного лучше! file1-9 - имена файлов для удаления, используйте переменную, если хотите, это одно и то же.

for file in file1 file2 file3 file4 file5 file6 file7 file8 file9; do echo -e "rm $file" >> sftp_batch; done; sftp -b sftp_batch username@hostname; rm sftp_batch
mbiber
источник
Что если в файлах есть пробелы в названии? Будет ли это решение работать?
codeforester
Вы можете указать имена файлов. Если у вас их много, я предлагаю вам изучить расширение параметров bash, чтобы получить наилучшие результаты. Обычно для простоты администратор не разрешает имена файлов с пробелами и связанными символами.
mbiber
1

Вы не можете дать список rmкоманде в sftp, только занимает один путь, как написано на странице руководства:

rm path
    Delete remote file specified by path.
user90256
источник
1

Я обычно использую, lftpчтобы сделать это.

Настройка - на сервере скинов rmeote
$ mkdir adir
$ touch afile1 afile2
$ ls
afile1  afile2
теперь мы удаляем
$ file_list="afile1 afile2"
$ lftp sftp://sam@skinner -e "cd ~/adir; mrm $file_list"
cd ok, cwd=/home/sam/adir    
rm ok, 2 files removed                 
lftp sam@skinner:~/adir> ls
drwxr-xr-x    2 sam      users        4096 Nov  4 11:52 .
drwxr-x---  131 sam      users       20480 Nov  4 11:51 ..
lftp sam@skinner:~/adir> bye

Чтобы сделать это одной командой:

$ lftp sftp://sam@skinner -e "cd ~/adir; mrm $file_list; bye"
SLM
источник
Я не могу выполнить команду lftp, может быть, это требует некоторых файлов библиотеки.
Бхавна
@bhawna - возможно, он не установлен.
SLM
1

Если вы можете sftp, вы не можете запустить ssh? Если так, то такая команда, как:

 ssh user@hostname rm file1 file2 

должно работать нормально. Если вы используете открытые / закрытые ключи SSH, пароля не будет.

Якорь,
источник
Да, это сработало, но приведенная выше команда не создает никакой информации журнала, и требование также заключается в создании журнала (хотя я не указал это в вопросе). Спасибо
Bhawna
1

Если это имена файлов. Вы можете удалить их, используя

rm file*
Филипп Рего
источник
Ну, это точно не я.
Кусалананда
Я попробовал этот метод, и он работает, если вы используете SFTP для доступа к удаленному серверу.
MrMauricioLeite