SFTP 세션에서 파일 이름 바꾸기

SFTP 세션에서 파일 이름 바꾸기

이것은SFTP파일 전송.

다음과 같이 진행하세요:

  1. 확장자가 있는 파일을 확인 .csv하고 로컬 디렉터리에 넣습니다.
  2. 그런 다음 원격 연결의 다른 폴더로 이동하세요.

명령 을 사용해 보았지만 rename오류가 발생했습니다."실패하다"

sftp의 배치 파일 옵션을 사용해 보았지만 명령이 파일 세트가 아닌 특정 파일 이름을 예상하는 -b것 같습니다 .rename

그럼 어떻게 해야 할까요?

답변1

저에게 도움이 되었기 때문에 문제에 대한 추가 정보를 제공해야 합니다.

chris@localhost$ finger 2> file.txt
chris@localhost$ sftp remotehost
Connected to remotehost.
sftp> ls -l file.txt
Can't ls: "/home/chris/file.txt" not found
sftp> ls -l file.tmp
Can't ls: "/home/chris/file.tmp" not found

# So the file doesn't exist on the remote in either form

sftp> put file.txt file.tmp
Uploading file.txt to /home/chris/file.tmp
file.txt                                                      100%  501     0.5KB/s   00:01
sftp> ls -l file.txt
Can't ls: "/home/chris/file.txt" not found
sftp> ls -l file.tmp
-rw-r-xr--    0 1001     1001          501 Aug 12 16:35 file.tmp

# It has arrived as file.tmp

sftp> rename file.tmp file.txt
sftp> ls -l file.txt
-rw-r-xr--    0 1001     1001          501 Aug 12 16:35 file.txt
sftp> ls -l file.tmp
Can't ls: "/home/chris/file.tmp" not found

# And been successfully renamed

답변2

분명히 renamesftp의 명령은아니요소스와 대상이 서로 다른 파일 시스템에 있을 때 작동합니다.

RedHat6, SLES9 등에서 이러한 동작을 본 적이 있습니다.

답변3

이것은 OP가 원했던 것과 정확히 일치하지 않을 수 있지만 !command"SFTP 세션 내에서 파일 이름 바꾸기"에 sftp가 도움이 된다고 생각합니다.

  • SFTP 도움말에서: "!command - 로컬 쉘에서 'command' 실행"

SFTP 세션에서의 사용법은 다음과 같습니다. (로컬: macOS Catalina, 원격: Ubuntu 16.04.6 LTS)

sftp> lls
blankFileForVSCODEbrowser.txt   counties
sftp> !command mv  blankFileForVSCODEbrowser.txt blankFileForVSCODEbrowserRenameTest.txt
sftp> lls
blankFileForVSCODEbrowserRenameTest.txt counties

답변4

Bash 쉘에서 다음을 수행해 볼 수 있습니다(한 줄로 줄일 수도 있음).

원격 sftp $server/$dir의 모든 csv 파일 이름을 txt로 바꿉니다(비밀번호 액세스가 없다고 가정).

for f in `echo 'ls *.csv' | sftp -qp $user@$server:$dir | grep -v ^sftp`; do
    echo "rename '$f' '${f%.csv}.txt'" | sftp -qp $user@$server:$dir ;
done

또는

# to move to $newpath folder:
for f in `echo 'ls *.csv' | sftp -qp $user@$server:$dir | grep -v ^sftp`; do
    echo "rename $f $newpath/${f##*/}" | sftp -qp $user@$server:$dir ;
done

어디

  • echo 'ls *.csv' | sftp $server:$dir- $dir 디렉토리의 원격 SFTP에서 ls를 실행합니다.
  • ${f%.csv}.txt- 변수 $f의 csv를 txt로 대체
  • ${f##*/}- 파일 경로 $f에서 경로 제거(만약의 경우)

PS 대화형 비밀번호 입력을 활성화해야 하는 경우 -o "BatchMode=no"매개변수를 추가해 보세요.sftp

관련 정보