이것은SFTP파일 전송.
다음과 같이 진행하세요:
- 확장자가 있는 파일을 확인
.csv
하고 로컬 디렉터리에 넣습니다. - 그런 다음 원격 연결의 다른 폴더로 이동하세요.
명령 을 사용해 보았지만 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
분명히 rename
sftp의 명령은아니요소스와 대상이 서로 다른 파일 시스템에 있을 때 작동합니다.
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