smbclient를 사용하여 비어 있지 않은 디렉토리를 삭제하는 방법은 무엇입니까? 나는 다음을 시도했습니다 :
1)rm
결과:
NT_STATUS_NO_SUCH_FILE listing [dir_path]
2)recurse;rm
결과:
No Error but also nothing happens! The folder remains as before!
삼)rmdir
결과:
NT_STATUS_DIRECTORY_NOT_EMPTY removing remote directory file [dir_path]
4)recurse;rmdir
결과:
NT_STATUS_DIRECTORY_NOT_EMPTY removing remote directory file [dir_path]
5)rm [dir_name]/*;rmdir [dir_name]
결과:
NT_STATUS_OBJECT_NAME_NOT_FOUND deleting remote file [sub_dir_path]
NT_STATUS_DIRECTORY_NOT_EMPTY removing remote directory file [dir_path]
6)recurse;rm [dir_name]/*;rmdir [dir_name]
결과:
NT_STATUS_OBJECT_NAME_NOT_FOUND deleting remote file [sub_dir_path]
NT_STATUS_DIRECTORY_NOT_EMPTY removing remote directory file [dir_path]
답변1
조금 늦었지만 smbclient 버전 4.7.0부터 이를 수행할 수 있는 deltree 명령이 있습니다. 서버의 현재 작업 디렉터리에서 마스크와 일치하는 모든 파일과 디렉터리가 삭제됩니다. 재귀를 활성화할 필요가 없습니다.
smb: \> deltree <mask>
답변2
다음과 같이 몇 줄을 작성할 수 있습니다.
myHost=fubar
myShare=batch
myRootPath="next_version\\SNAPSHOT"
myDirectory="snafu-fubar"
myCredentials="sbb.ch\\ricky%password"
smbclient \\\\${myHost}\\${myShare} -D "${myRootPath}" -U ${myCredentials} -c "recurse on; ls ${myDirectory}" | grep '^\\' \
| awk -F\\ '{print NF,$0}' | sort -nr | cut -d ' ' -f2- \
| while read -r myDir; do
myRoot="${myDir%\\*}"
myFolder="${myDir##*\\}"
smbclient \\\\${myHost}\\${myShare} -D "${myDir}" -U ${myCredentials} -c "del *" || true
smbclient \\\\${myHost}\\${myShare} -D "${myRoot}" -U ${myCredentials} -c "rmdir \"${myFolder}\"" || true
done
답변3
OP의 코멘트:
좋아, 해결 방법을 찾았습니다. 원격 Windows 공유 폴더를 로컬 디렉터리에 마운트한 다음 "rm -r"을 수행합니다. 팁을 주신 Mikhail에게 감사드립니다.여기– 락스미 2일 전
이런 방식으로 질문에 효과적으로 답변할 수 있습니다(그리고 부작용으로 답변되지 않은 질문 대기열에서 제거됩니다).