Script Bash que usa curl para enviar arquivos e pastas para uma pasta compartilhada publicamente nextcloud/owncloud.
A lógica é
cloudsend
As origens estão aqui, obrigado a todos que contribuíram no GIST original
Verifique também meu aplicativo cloudmanager para obter um cliente webdav nextcloud/owncloud completo.
Cloudsend v2 mudou a forma como a análise de senha funciona.
Cloudsend 0.xx usou o parâmetro -p
para a senha do ambiente (alterado para -e
na v2+).
Use OU -e
OU -p
, mas não ambos. O último a ser chamado será usado.
Env Pass > Defina a variável CLOUDSEND_PASSWORD='MySecretPass'
e use a opção -e
Param Pass > Envie a senha como parâmetro com -p
Você pode usar globbing de entrada (curingas) definindo a opção -g
.
Isso ignorará a verificação do arquivo de entrada e passará o glob para curl a ser usado.
Você NÃO DEVE renomear arquivos durante o globbing, nomes de arquivos de entrada serão usados.
Você NÃO DEVE enviar pastas durante o globbing, apenas arquivos são permitidos.
Exemplos de globos:
'{file1.txt,file2.txt,file3.txt}'
'img[1-100].png'
Mais informações sobre globbing
https://github.com/tavinus/cloudsend.sh/wiki/Input-Globbing
Você pode enviar conteúdo canalizado usando -
ou .
como o nome do arquivo de entrada (especificações de curl) .
Você DEVE definir um nome de arquivo de destino para usar stdin como entrada ( -r
).
Do manual do curl:
Use o nome do arquivo -
(um único traço) para usar stdin em vez de um determinado arquivo.
Como alternativa, o nome do arquivo .
(um único período) pode ser especificado em vez de -
para usar
stdin em modo sem bloqueio para permitir a leitura da saída do servidor enquanto o stdin está sendo carregado.
A partir da v2.2.0, cloudsend.sh
pode enviar pastas. Ele percorrerá a árvore de pastas, criará
cada pasta e envie cada arquivo. Basta usar um caminho de pasta como entrada.
Isso envia todos os FILE na pasta shell atual.
altere o primeiro ./
para alterar a pasta de entrada ( por exemplo, '/home/myname/myfolder'
)
-maxdepth 1
irá ler apenas a pasta atual, mais níveis vão mais fundo, a supressão vai para todos os níveis
encontre ./ -maxprofundidade 1 -type f -exec ./cloudsend.sh {} https://cloud.mydomain.tld/s/TxWdsNX2Ln3X5kxG -p suaSenha;
Isso envia todos os ARQUIVOS dentro de /home/myname/myfolder
, incluindo TODAS as subpastas.
encontre /home/meunome/minhapasta -type f -exec ./cloudsend.sh {} https://cloud.mydomain.tld/s/TxWdsNX2Ln3X5kxG -p suaSenha;
Isso envia um tarball compactado da pasta shell atual.
tarcf - "$(pwd)" | gzip -9 -c | ./cloudsend.sh - 'https://cloud.meudominio.tld/s/TxWdsNX2Ln3X5kxG' -r minhapasta.tar.gz
Isso envia um tarball compactado de /home/myname/myfolder
.
tar cf - /home/meunome/minhapasta | gzip -9 -c | ./cloudsend.sh - 'https://cloud.meudominio.tld/s/TxWdsNX2Ln3X5kxG' -r minhapasta.tar.gz
Isso envia um arquivo zip recursivo de /home/myname/myfolder
.
zip -q -r -9 - /home/meunome/minhapasta | ./cloudsend.sh - 'https://cloud.mydomain.tld/s/TxWdsNX2Ln3X5kxG' -r minhapasta.zip
Desde a versão 2.3.2 você pode criar pastas no servidor remoto com o parâmetro -C|--mkdir
. Pode ser uma única pasta ou uma árvore.
Basta passar a pasta a ser criada como se fosse o arquivo que está sendo enviado.
$ ./cloudsend.sh -C -p MyPassword 'A Folder' "https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY" Tavinus Cloud Sender v2.3.5 > Color mode OFF > Using password from Parameter > Makedir mode is ON ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ CREATING FOLDERS ON TARGET ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ A Folder > OK (created) ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ MAIN TARGET DOWNLOAD URL ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Download URL: > https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY/download?path=/A Folder https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY/download?path=%2fA%20Folder Access URL: > https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY?path=/A Folder https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY?path=%2fA%20Folder ‗‗‗‗‗‗‗‗‗ SUMMARY ‾‾‾‾‾‾‾‾‾ Curl : NO Errors CurlExit : 0 WebDav : NO Errors Status : Makedir Completed Root : / Base : / Full : / Target : A Folder Type : Directory
Desde a versão 2.3.1 você pode deletar arquivos e pastas no servidor remoto.
Basta usar a opção -D|--delete
e passar o arquivo/pasta a ser deletado como se fosse o arquivo que está sendo enviado.
Este exemplo exclui A Folder
do servidor remoto com todas as suas subpastas e arquivos.
$ ./cloudsend.sh -D -p MyPassword 'A Folder' "https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY" Tavinus Cloud Sender v2.3.5 > Using password from Parameter > Delete mode is ON ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ DELETING TARGET ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ A Folder > OK (deleted) ‗‗‗‗‗‗‗‗‗ SUMMARY ‾‾‾‾‾‾‾‾‾ Curl : NO Errors CurlExit : 0 WebDav : NO Errors Status : Delete Completed Root : / Base : / Full : / Target : A Folder Type : Unknown
Desde a versão 2.3.2 você pode definir uma pasta de destino para operações remotas com o parâmetro -T|--target
. Pode ser uma única pasta ou uma árvore.
A árvore de destino será criada antes da execução das operações, a menos que você esteja executando o comando delete.
Todos os comandos usarão a pasta de destino como pasta base (excluir, enviar, criar pasta, etc).
$ ./cloudsend.sh -p MyPassword -T 'A Folder/ A Subfolder' ./README.md "https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY" Tavinus Cloud Sender v2.3.5 > Using password from Parameter > Base Target folder set to: "/A Folder/ A Subfolder" ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ CREATING BASE TARGET FOLDERS ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ A Folder > OK (created) A Folder/ A Subfolder > OK (created) ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ SENDING SINGLE FILE ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ README.md > ######################################################################### 100.0% ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ MAIN TARGET DOWNLOAD URL ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Download URL: > https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY/download?path=A Folder/ A Subfolder&files=README.md https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY/download?path=A%20Folder%2f%20A%20Subfolder&files=README.md Access URL: > https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY?path=A Folder/ A Subfolder&files=README.md https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY?path=A%20Folder%2f%20A%20Subfolder&files=README.md ‗‗‗‗‗‗‗‗‗ SUMMARY ‾‾‾‾‾‾‾‾‾ Curl : NO Errors CurlExit : 0 WebDav : NO Errors Status : Send Completed Root : / Base : /A Folder/ A Subfolder Full : /A Folder/ A Subfolder Target : README.md Type : File
Cloudsend também suporta a leitura da pasta raiz do URL (se o URL estiver vinculado a uma pasta).
Cloudsend NÃO tentará criar esta pasta, ela já deve existir, mas a usará como pasta raiz base para tudo, incluindo a configuração base --target
.
Links com pastas têm uma sintaxe https://cloud.mydomain.tld/index.php/s/H2Q3RHXZ4f974sY?path=my root
.
Esse ?path=my root
define 'my root'
como a pasta de destino raiz.
Neste exemplo 'my root' já existia no servidor, caso contrário obteríamos erros
$ ./cloudsend.sh -p MyPass -T 'A Folder/A Subfolder' "../folder 1" "https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY?path=my root" Tavinus Cloud Sender v2.3.6 > Using password from Parameter > Base Target folder set to: "/A Folder/A Subfolder" > Root Target folder set from URL: "my root" ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ CREATING BASE TARGET FOLDERS ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ A Folder > OK (created) A Folder/A Subfolder > OK (created) ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ CREATING FOLDER TREE AT DESTINATION ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ folder 1 > OK (created) folder 1/folder 1-a > OK (created) folder 1/folder 1-a/folder 1 a 1 > OK (created) folder 1/folder 1-b > OK (created) ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ SENDING ALL FILES FROM FOLDER TREE ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ folder 1/file 1.txt > ######################################################################### 100.0% folder 1/file 2.txt > ######################################################################### 100.0% folder 1/file 3.txt > ######################################################################### 100.0% folder 1/folder 1-a/file 2 3.txt > ######################################################################### 100.0% folder 1/folder 1-a/folder 1 a 1/file 6.txt > ######################################################################### 100.0% folder 1/folder 1-b/file 5.txt > ######################################################################### 100.0% ‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗‗ MAIN TARGET DOWNLOAD URL ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Download URL: > https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY/download?path=my root/A Folder/A Subfolder/folder 1 https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY/download?path=my%20root%2fA%20Folder%2fA%20Subfolder%2ffolder%201 Access URL: > https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY?path=my root/A Folder/A Subfolder/folder 1 https://cloud.mydomain.tld/index.php/s/H4Q3RHXZ4e974PY?path=my%20root%2fA%20Folder%2fA%20Subfolder%2ffolder%201 ‗‗‗‗‗‗‗‗‗ SUMMARY ‾‾‾‾‾‾‾‾‾ Curl : NO Errors CurlExit : 0 WebDav : NO Errors Status : Send Completed Root : /my root Base : /A Folder/A Subfolder Full : /my root/A Folder/A Subfolder Target : folder 1 Type : Directory
$ ./cloudsend --help Tavinus Cloud Sender v2.3.8 Parameters: -h | --help Print this help and exits -q | --quiet Disables verbose messages -V | --version Prints version and exits -N | --no-color Disables colored output -D | --delete Delete file/folder in remote share -T | --targetRebase work into a target folder (instead of root) -C | --mkdir Create a directory tree in the remote share -r | --rename Change the destination file name -g | --glob Disable input file checking to use curl globs -k | --insecure Uses curl with -k option (https insecure) -A | --user-agent Specify user agent to use with curl -A option -E | --referer Specify referer to use with curl -e option -l | --limit-rate Uses curl limit-rate (eg 100k, 1M) -a | --abort-on-errors Aborts on Webdav response errors -p | --password Uses as shared folder password -e | --envpass Uses env var $CLOUDSEND_PASSWORD as share password You can 'export CLOUDSEND_PASSWORD' at your system, or set it at the call Please remeber to also call -e to use the password set Use: ./cloudsend.sh [options] CLOUDSEND_PASSWORD='MySecretPass' ./cloudsend.sh -e [options] Passwords: Cloudsend 2 changed the way password works Cloudsend 0.x.x used the '-p' parameter for the Environment password (changed to -e in v2+) Please use EITHER -e OR -p, but not both. The last to be called will be used Env Pass > Set the variable CLOUDSEND_PASSWORD='MySecretPass' and use the option '-e' Param Pass > Send the password as a parameter with '-p ' Folders: Cloudsend 2.2.0 introduces folder tree sending. Just use a directory as . It will traverse all files and folders, create the needed folders and send all files. Each folder creation and file sending will require a curl call. Target Folder: Cloudsend 2.3.2 introduces the target folder setting. It will create the folder in the remote host and send all files and folders into it. It also works as a base folder for the other operations like deletion and folder creation. Accepts nested folders. ./cloudsend.sh -T 'f1/f2/f3' -p myPass 'folder|file' 'https://cloud.domain/index.php/s/vbi2za9esfrgvXC' Create Folder: Available since version 2.3.2. Just pass the folder name to be created as if it was the file/folder being sent and add the -C | --mkdir parameter. Runs recursively. ./cloudsend.sh -C -p myPass 'new folder/new2' 'https://cloud.domain/index.php/s/vbi2za9esfrgvXC' Delete: Available since version 2.3.1. Just pass the file/folder to be deleted as if it was the file/folder being sent and add the -D | --delete parameter. ./cloudsend.sh -D -p myPass 'folder/file' 'https://cloud.domain/index.php/s/vbi2za9esfrgvXC' Input Globbing: You can use input globbing (wildcards) by setting the -g option This will ignore input file checking and pass the glob to curl to be used You MUST NOT rename files when globbing, input file names will be used You MUST NOT send folders when globbing, only files are allowed Glob examples: '{file1.txt,file2.txt,file3.txt}' 'img[1-100].png' Send from stdin (pipe): You can send piped content by using - or . as the input file name (curl specs) You MUST set a destination file name to use stdin as input (-r ) Use the file name '-' (a single dash) to use stdin instead of a given file Alternately, the file name '.' (a single period) may be specified instead of '-' to use stdin in non-blocking mode to allow reading server output while stdin is being uploaded Examples: CLOUDSEND_PASSWORD='MySecretPass' ./cloudsend.sh -e './myfile.txt' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28' ./cloudsend.sh './myfile.txt' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28' ./cloudsend.sh 'my Folder' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28' ./cloudsend.sh -r 'RenamedFile.txt' './myfile.txt' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28' ./cloudsend.sh --limit-rate 200K -p 'MySecretPass' './myfile.txt' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28' ./cloudsend.sh -p 'MySecretPass' -r 'RenamedFile.txt' './myfile.txt' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28' ./cloudsend.sh -g -p 'MySecretPass' '{file1,file2,file3}' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28' cat file | ./cloudsend.sh - 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28' -r destFileName
O que é "https://cloud.mydomain.net/s/fLDzToZF4MLvG28"?
O que é um "link de pasta"?
De onde eu consigo isso?
Especialmente a parte "s/fLDzToZF4MLvG28"?
Você tem que compartilhar uma pasta gravável e usar o link gerado
Da documentação do Nextcloud 21