Вот скрипт bash, который я запускаю локально:
#!/usr/bin/bash
ls some_pattern_*.txt > deletion_list.txt
rm $(cat deletion_list.txt)
rm deletion_list.txt
exit 0
Он ищет файлы, соответствующие определенному шаблону, и выводит этот список файлов в текстовый файл с именем * 1004. *. Затем скрипт удаляет все файлы, указанные в текстовом документе, прежде чем окончательно удалить сам deletion_list.txt
. Это может показаться очень запутанным, но у меня есть причина сделать это следующим образом.
Вот немного измененная версия, которую я пытаюсь запустить на удаленном хосте через sftp
соединение:
#!/usr/bin/bash
sftp -i ~/.ssh/myprivatekey $username@$host <<-EOF
lcd /home/mydirectory
!ls some_pattern_*.txt > deletion_list.txt
rm $(cat deletion_list.txt)
!rm deletion_list.txt
EOF
exit 0
Что нужно сделать так:
1) Подключиться к удаленному хосту с помощью sftp
(ssh
на удаленном хосте не включен, в случае, если какие-либо ответы предлагают использовать ssh
вместо )
2) Изменить локальный каталог
3) Создать список файлов для удаления из локального каталога, в котором мы находимся, и сохранить deletion_list.txt
локально в том же каталоге
4) Удаление файлов с удаленного хоста на основе файлов в deletion_list.txt
- удаление происходит удаленно, список файлов для удаления является локальным (deletion_list.txt
создается из файлов, которые являются локальными, и затем те же файлы удалено с удаленного хоста).
У меня проблема с шагом 4. Я не знаю, как удалить удаленные файлы, поступающие из локального файла.
РЕДАКТИРОВАТЬ:
Как кто-то указал, cat
также не работает во время сеанса SFTP.