สคริปต์ทุบตีที่ใช้ curl เพื่อส่งไฟล์และโฟลเดอร์ไปยังโฟลเดอร์ที่แชร์แบบสาธารณะ nextcloud / owncloud
ตรรกะก็คือ
cloudsend
Origins อยู่ที่นี่ ขอขอบคุณทุกคนที่มีส่วนร่วมใน GIST ดั้งเดิม
ตรวจสอบแอป cloudmanager ของฉันด้วยเพื่อดูไคลเอ็นต์ webdav ของ nextcloud/owncloud แบบเต็ม
Cloudsend v2 เปลี่ยนวิธีการทำงานของการแยกวิเคราะห์รหัสผ่าน
Cloudsend 0.xx ใช้พารามิเตอร์ -p
สำหรับรหัสผ่านสภาพแวดล้อม (เปลี่ยนเป็น -e
ใน v2+)
โปรดใช้อย่างใดอย่างหนึ่ง -e
หรือ -p
แต่ไม่ใช่ทั้งสองอย่าง ส่วนสุดท้ายที่จะเรียกจะถูกใช้
Env Pass > ตั้งค่าตัวแปร CLOUDSEND_PASSWORD='MySecretPass'
และใช้ตัวเลือก -e
Param Pass > ส่งรหัสผ่านเป็นพารามิเตอร์ด้วย -p
คุณสามารถใช้อินพุต globbing (ไวด์การ์ด) ได้โดยตั้งค่าตัวเลือก -g
วิธีนี้จะเพิกเฉยต่อการตรวจสอบไฟล์อินพุตและส่ง glob ไปยัง curl ที่จะใช้
คุณ ต้องไม่ เปลี่ยนชื่อไฟล์เมื่อมีการกลม ระบบจะใช้ชื่อไฟล์อินพุต
คุณ ต้องไม่ ส่งโฟลเดอร์เมื่อ globbing อนุญาตเฉพาะไฟล์เท่านั้น
ตัวอย่างโลก:
'{file1.txt,file2.txt,file3.txt}'
'img[1-100].png'
ข้อมูลเพิ่มเติมเกี่ยวกับ globbing
https://github.com/tavinus/cloudsend.sh/wiki/Input-Globbing
คุณสามารถส่งเนื้อหาไปป์ได้โดยใช้ -
หรือ .
เป็นชื่อไฟล์อินพุต (ข้อกำหนด curl)
คุณ ต้อง ตั้งชื่อไฟล์ปลายทางเพื่อใช้ stdin เป็นอินพุต ( -r
)
จากคู่มือของ curl :
ใช้ชื่อไฟล์ -
(ขีดกลางเดียว) เพื่อใช้ stdin แทนไฟล์ที่กำหนด
หรือชื่อไฟล์ .
(ช่วงเดียว) อาจระบุแทน -
เพื่อใช้ก็ได้
stdin ในโหมดไม่บล็อกเพื่อให้อ่านเอาต์พุตของเซิร์ฟเวอร์ในขณะที่ stdin กำลังอัปโหลด
จาก v2.2.0 cloudsend.sh
สามารถส่งโฟลเดอร์ได้ มันจะสำรวจแผนผังโฟลเดอร์สร้าง
แต่ละโฟลเดอร์และส่งแต่ละไฟล์ เพียงใช้เส้นทางโฟลเดอร์เป็นอินพุต
สิ่งนี้จะส่งทุก FILE ในโฟลเดอร์เชลล์ปัจจุบัน
เปลี่ยนอันแรก ./
เพื่อเปลี่ยนโฟลเดอร์อินพุต ( เช่น '/home/myname/myfolder'
)
-maxdepth 1
จะอ่านเฉพาะโฟลเดอร์ปัจจุบันเท่านั้น ระดับที่มากขึ้นจะลึกลงไป การปราบปรามจะไปทุกระดับ
ค้นหา ./ -maxความลึก 1 -ประเภท f -exec ./cloudsend.sh {} https://cloud.mydomain.tld/s/TxWdsNX2Ln3X5kxG -p yourPassword ;
สิ่งนี้จะส่งทุก FILE ภายใน /home/myname/myfolder
รวมถึงโฟลเดอร์ย่อยทั้งหมด
ค้นหา /home/myname/myfolder -type f -exec ./cloudsend.sh {} https://cloud.mydomain.tld/s/TxWdsNX2Ln3X5kxG -p yourPassword ;
สิ่งนี้จะส่ง tarball gziped ของโฟลเดอร์เชลล์ปัจจุบัน
tar cf - "$(pwd)" | gzip -9 -c | ./cloudsend.sh - 'https://cloud.mydomain.tld/s/TxWdsNX2Ln3X5kxG' -r myfolder.tar.gz
สิ่งนี้จะส่ง tarball gziped ของ /home/myname/myfolder
tar cf - /home/myname/myfolder | gzip -9 -c | ./cloudsend.sh - 'https://cloud.mydomain.tld/s/TxWdsNX2Ln3X5kxG' -r myfolder.tar.gz
สิ่งนี้จะส่งไฟล์ zip แบบเรียกซ้ำของ /home/myname/myfolder
zip -q -r -9 - /home/myname/myfolder | ./cloudsend.sh - 'https://cloud.mydomain.tld/s/TxWdsNX2Ln3X5kxG' -r myfolder.zip
ตั้งแต่เวอร์ชัน 2.3.2 คุณสามารถสร้างโฟลเดอร์ในเซิร์ฟเวอร์ระยะไกลด้วยพารามิเตอร์ -C|--mkdir
อาจเป็นโฟลเดอร์เดียวหรือแบบต้นไม้ก็ได้
เพียงส่งโฟลเดอร์ที่จะสร้างราวกับว่าเป็นไฟล์ที่ถูกส่ง
$ ./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
ตั้งแต่เวอร์ชัน 2.3.1 คุณสามารถลบไฟล์และโฟลเดอร์ที่เซิร์ฟเวอร์ระยะไกลได้
เพียงใช้ตัวเลือก -D|--delete
และส่งไฟล์/โฟลเดอร์ที่จะลบราวกับว่าเป็นไฟล์ที่ถูกส่ง
ตัวอย่างนี้จะลบ A Folder
ออกจากเซิร์ฟเวอร์ระยะไกลพร้อมโฟลเดอร์ย่อยและไฟล์ทั้งหมด
$ ./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
ตั้งแต่เวอร์ชัน 2.3.2 คุณสามารถตั้งค่าโฟลเดอร์เป้าหมายสำหรับการดำเนินการระยะไกลด้วยพารามิเตอร์ -T|--target
อาจเป็นโฟลเดอร์เดียวหรือแบบต้นไม้ก็ได้
ทรีเป้าหมายจะถูกสร้างขึ้นก่อนที่จะรันการดำเนินการ เว้นแต่ว่าคุณกำลังรันคำสั่งลบ
คำสั่งทั้งหมดจะใช้โฟลเดอร์เป้าหมายเป็นโฟลเดอร์ฐาน (ลบ ส่ง สร้างโฟลเดอร์ ฯลฯ)
$ ./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 ยังรองรับการอ่านโฟลเดอร์รูทจาก URL (หาก URL ลิงก์ไปยังโฟลเดอร์)
Cloudsend จะไม่พยายามสร้างโฟลเดอร์นี้ แต่ต้องมีอยู่แล้ว แต่จะใช้เป็นโฟลเดอร์รูทฐานสำหรับทุกสิ่ง รวมถึงการตั้งค่าฐาน --target
ลิงก์ที่มีโฟลเดอร์มีไวยากรณ์ https://cloud.mydomain.tld/index.php/s/H2Q3RHXZ4f974sY?path=my root
นั่น ?path=my root
กำหนด 'my root'
เป็นโฟลเดอร์เป้าหมายรูท
ในตัวอย่างนี้ 'รูทของฉัน' มีอยู่แล้วบนเซิร์ฟเวอร์ ไม่เช่นนั้นเราจะได้รับข้อผิดพลาด
$ ./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
"https://cloud.mydomain.net/s/fLDzToZF4MLvG28" คืออะไร
"โฟลเดอร์ลิงก์" คืออะไร?
ฉันจะได้มันมาจากไหน?
โดยเฉพาะส่วน "s/fLDzToZF4MLvG28"?
คุณต้องแชร์โฟลเดอร์ที่เขียนได้และใช้ลิงก์ที่สร้างขึ้น
จากเอกสาร Nextcloud 21