이 게시물은 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*