使用 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!

3)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 天前

这样,问题就得到了有效的回答(并且作为副作用,从未回答的问题队列中删除)。

相关内容