dav CLI#

If webdav4 is installed with fsspec package, dav CLI similar to aws s3 is also available to make it easier for the interaction.

If not, you can install it as follows:

pip install -U "webdav4[fsspec]"

Common arguments#

  • --endpoint-url: Path to the server/hostname. Can also be specified through WEBDAV_ENDPOINT_URL environment variable (and the url can contain password and user information as well).

    export WEBDAV_ENDPOINT_URL="https://user:password@webdav.server.org/remote.php/dav/files/user"
    
  • --user: (Optional) Provide username of the account. Can also be specified in the url itself in --endpoint-url or through environment variable.

  • --password: (Optional) Provide password for the account. Can also be specified in the url itself in --endpoint-url or through environment variable.

  • --verbose: Provides more information and traceback on error.

  • --help: Shows help message and exits.

Note that all the arguments are expected to follow after dav command. Example: dav --user user ls.

Examples:#

Listing files

dav ls

Listing files recursively

dav ls -R

Listing files recursively to certain depth

dav ls -R -L2

Download a file or a directory from remote

dav cp dav://path/to/file file dav cp -R dav://path/to/file file

Upload a file or a directory to remote

dav cp file dav://path/to/file dav cp -R dir dav://path/to/dir

Copy a file or a directory within remote

dav cp dav://path/to/file dav://path/to/file2 dav cp -R dav://path/to/dir1 dav://path/to/dir2

Note: mv works similarly to cp in both upload and download cases, as it does not remove files, except when between remotes.

Move a file or a directory within remote

dav mv dav://path/to/file dav://path/to/file2 dav mv -R dav://path/to/dir1 dav://path/to/dir2

Delete a file or a directory

dav rm dav://path/to/file dav rm -R dav://path/to/dir dav rm -R path/dir

Create a directory

dav mkdir path/dir dav mkdir dav://path/dir

Count files and determine total size

dav du path/dir

Print contents of a file

dav cat dav://path/to/file

Periodically sync files

Similar to aws s3 sync and uses file sizes and modified times to sync intelligently between local-remote, remote-local and local-remote.

dav sync dir dav://path/to/dir  # local to remote
dav sync dav://path/to/dir dir  # remote to local
dav sync dav://path/dir1 dav://path/dir2  # remote-remote

Run multiple commands at once

dav run commands.txt  # or,
cat commands.txt | dav run -

commands.txt can look something like follows:

cp dir/dir2 dav://path/to/dir
mv dav://path/dir2 dav://path/dir3
# list all files (comments are supported)
ls -R
du