비어 있지 않은 디렉토리를 삭제하려면 smbclient를 사용하십시오.

비어 있지 않은 디렉토리를 삭제하려면 smbclient를 사용하십시오.

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일 전

이런 방식으로 질문에 효과적으로 답변할 수 있습니다(그리고 부작용으로 답변되지 않은 질문 대기열에서 제거됩니다).

관련 정보