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 만 삭제되고 있음을 알았습니다.

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

답변:


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

파일 이름에 공백이 있으면 어떻게합니까? 이 솔루션이 작동합니까?
codeforester

파일 이름을 인용 할 수 있습니다. 많은 것들이 있다면 최상의 결과를 얻기 위해 bash 매개 변수 확장을 살펴 보는 것이 좋습니다. 일반적으로 관리자는 공백과 관련 문자가 포함 된 파일 이름을 허용하지 않습니다.
mbiber

1

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

rm path
    Delete remote file specified by path.

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"

lftp 명령을 실행할 수 없습니다. 라이브러리 파일이 필요할 수 있습니다.
bhawna

@bhawna-설치되지 않았을 수 있습니다.
slm

1

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

 ssh user@hostname rm file1 file2 

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


예, 작동했지만 위의 명령은 로그 정보를 생성하지 않으며 요구 사항은 로그를 작성해야합니다 (질문에 로그를 지정하지 않았음에도 불구하고). 감사합니다
bhawna

1

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

rm file*

글쎄, 난 아니 었어.
Kusalananda

SFTP를 사용하여 원격 서버에 액세스하는 경우이 방법을 시도했지만 작동합니다.
MrMauricioLeite
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.