空でないディレクトリを削除するには、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日前

この方法で質問に効果的に答えることができます(そして副作用で答えられていない質問キューから削除されます)。

関連情報