sftp를 사용하여 여러 파일을 제거하는 방법 삭제됩니다. $file_list=”file1 file2″ sftp $USER@$HOST rm

이 게시물은 sftp 암호 연결이 적을 때 원격 서버에서 다중 파일을 제거하는 것에 관한 것입니다. 아래와 같은 코드가 있습니다. $file_list변수를 다음과 같이 설정하면 변수의 첫 번째 파일 만 삭제됩니다.

$file_list="file1 file2"

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

프롬프트 모드에서 명령을 실행하려고했습니다.

sftp $USER@$HOST
rm file1 file2

그러나 여전히 file1 만 삭제되고 있음을 알았습니다.

기본 명령이 누락되었는지 확실하지 않습니다. sftp 프롬프트 창에서 잘못된 명령 으로 거부 된 mdelete/ mdel/을 시도했습니다 .mrm



답변

다음은 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


답변

rm명령에 목록을 제공 할 수 없으며 sftp매뉴얼 페이지에 기록 된대로 한 경로 만 사용하십시오.

rm path
    Delete remote file specified by path.


답변

나는 보통 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"


답변

sftp를 사용할 수 있다면 ssh를 실행할 수 없습니까? 그렇다면 다음과 같은 명령이 있습니다.

 ssh user@hostname rm file1 file2

잘 작동합니다. 공개 / 개인 SSH 키를 사용하는 경우 비밀번호 프롬프트가 표시되지 않습니다.


답변

파일 이름 인 경우 글로브 패턴을 사용하여 삭제할 수 있습니다.

rm file*


답변