我面临的情况相当简单,我必须将一大堆文件原封不动地上传到WebDAV可通过 HTTPS 访问的服务器。我必须从仅使用命令行的 Linux 机器开始上传。我可以在机器上安装程序。
我试过了尸体但不支持递归目录上传。
您知道实现这一目标的简单工具/脚本吗?
好的,我找到了可以做到的事情。
davpush.pl
我从这里可以找到的脚本开始https://github.com/ptillemans/davpush
需要进行一些改变:
- 将所有“
dav://
”替换为“https://
” - 在“
print POUT "open";
”前添加“print POUT $script;
”
该死,为了简单地上传目录而不得不破解 perl 脚本,这太粗鲁了。我仍在寻找简单的工具/脚本。
答案1
尝试gnomevfs-copy
:
- CLI Magic:使用 GNOMEvfs 操作文件
- 手册页告诉你 gnomevfs 已被弃用,取而代之的是 gvfs
- gvfs-copy 手册页。注意:“无论成功或失败,都会返回退出值 0。”
编辑:gvfs-copy 不是递归的。我修补了它,但还得发布代码。在此期间,请检查戴夫来自 perldav。它执行递归传输。
如果你没有禁用保险丝,你可以尝试davfs2
如果你不反对编写自己的工具,你可以使用 gvfs 并从中获取灵感gvfs-copy 的源代码
我遇到了类似的问题,所以我可能会找到更好的解决方案
答案2
这是一个快速破解的 shell 脚本,允许使用尸体:
#!/bin/sh
usage () { echo "$0 <src> <cadaver-args>*" >/dev/stderr; }
error () { echo "$1" >/dev/stderr; usage; exit 1; }
test $# '<' 3 || \
error "Source and cadaver arguments expected!";
src="$1"; shift;
test -r "$src" || \
error "Source argument should be a readable file or directory!";
cd "$(dirname "$src")";
src="$(basename "$src")";
root="$(pwd)";
rc="$(mktemp)";
{
find "$src" '(' -type d -a -readable ')' \
-printf 'mkcol "%p"\n';
find "$src" '(' -type f -a -readable ')' \
-printf 'cd "%h"\nlcd "%h"\n' \
-printf 'mput "%f"\n' \
-printf 'cd -\nlcd "'"$root"'"\n';
echo "quit";
} > "$rc";
cadaver -r "$rc" "$@";
rm -f "$rc";
如果它被命名,davcpy.sh
那么命令如下
davcpy.sh "<local-directories>/<dirname>" "https://<target-website>/<some-directories>/"
允许递归复制
<local-directories>/<dirname>
进入名为
<some-directories>/<dirname>
请注意,它使用脚本功能来cadaver
允许以交互方式输入登录名/密码。我认为它足够强大,可以处理包含空格的奇怪文件和目录名称,但我没有测试过任何此类情况。
答案3
解决方案可能是克隆。这是一个单向命令行同步程序,类似于 rsync,支持 WebDAV(以及其他程序)。它可以递归复制目录,跳过目标上存在的文件。它有一些命令行选项来控制同步行为,例如,如果目标文件从源中消失,您是否希望删除它们。许多发行版都有可用的软件包,但您也可以安装和运行纯二进制文件。第一次,您需要定义一个“远程”:
rclone config create my-remote webdav \
url https://my-webdav-server/my-dir/ \
vendor other \
user 'onno' pass 'mypasswd'
之后,您可以复制或同步文件和目录:
rclone copy /home/onno/mydir my-remote:
答案4
我在 Ubuntu Linux 上。借助 fuse(用户空间中的文件系统)和 mountdavfs(davfs2),您可以将 Webdav 服务器上的子目录挂载为本地文件夹。
打开终端并按以下步骤操作:
如果 davfs2 不存在,请安装它:
sudo apt-get install davfs2
连接到Webdav服务器:
sudo mount.davfs -o user=knb,rw https://webdav.site.de/data /mnt/somedir
(必须输入文件系统的所有者,否则没有写入权限)
此外,我还必须输入以下几行/etc/dafs2/davfs2.conf
:
use_proxy 0
use_locks 0
if_match_bug 1
看https://bugs.launchpad.net/ubuntu/+source/davfs2/+bug/466960
mount
- 命令 - 结果(输出的最后一行):
https://webdav.mysite.de/icdp on /media/somedir type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=0,allow_other,max_read=16384,uid=1000,gid=0,helper=davfs)
还要检查是否存在奇怪的文件~/.davfs2/secrets
- 这可能是必要的,用于在重启后继续永久挂载。
现在您可以发出类似的命令cp -vr /data/myphotos /media/somedir
,文件将被递归复制并上传到 webdav 网站。