GLOBUS-URL-COPY(1)

🌸 GLOBUS-URL-COPY(1) β€” the Grid Community Toolkit Manual, bestie edition πŸ’…

okay so. this is the manual page for globus-url-copy, and if you're reading this you're about to move Some Data. let's go 🫢


✨ NAME ✨

globus-url-copy β€” it's globus-url-copy. that's the name. iconic of it honestly πŸ’–


✨ SYNOPSIS ✨

globus-url-copy [options] SOURCE-URL DESTINATION-URL

✨ DESCRIPTION ✨

so globus-url-copy is a command line tool for multi-protocol data movement. it does not care about your drama, it cares about moving your bytes.

it supports these protocol specifiers inside the URL: gsiftp:// (that's GridFTP, the main character), ftp://, http://, https://, sshftp:// and file:///. periodt. πŸ’…


✨ OPTIONS ✨

okay here's the whole menu, no skips, no shortcuts, every single one. grab a snack πŸ“

  • -help, -usage β€” print help. that's it, that's the whole job.
  • -versions β€” print the versions of all the modules this program uses. like a little receipt of everything it's built on.
  • -c, -continue-on-error β€” do not die after any errors. by default the program will exit after most errors, so this is you saying "bestie, keep going" 😭
  • -a, -ascii β€” convert the file to/from ASCII format to/from local file format.
  • -b, -binary β€” do not apply any conversion to the files. this is the default, and it's lowkey the sane choice.
  • -f FILENAME β€” read a list of URL pairs from filename. every line should contain sourceURL destURL. enclose URLs that have spaces in them with double quotes ("). blank lines and lines beginning with # get ignored, so go ahead and leave notes for your future self.
  • -cd, -create-dest β€” create the destination directory if needed. it's giving prepared. ✨
  • -r β€” copy files in subdirectories. recursive behavior, we love her.
  • -fast β€” recommended when using GridFTP servers. use MODE E for all data transfers, including reusing data channels between list and transfer operations. it's fast, the name did not lie. πŸ”₯
  • -t SECONDS β€” run the transfer for this number of seconds and then end. useful for performance testing or forced restart loops.
  • -q, -quiet β€” suppress all output for successful operation. no notes, just vibes.
  • -v, -verbose β€” display URLs being transferred.
  • -vb, -verbose-perf β€” during the transfer, display the number of bytes transferred and the transfer rate per second. and also show URLs being transferred. numbers AND names, we're fed πŸ’–
  • -dbg, -debugftp β€” debug ftp connections. prints control channel communication to stderr.
  • -rst, -restart β€” restart failed ftp operations. get back up, we try again.
  • -rst-retries RETRIES β€” the maximum number of times to retry the operation before giving up on the transfer. use 0 for infinite. default is 5.
  • -rst-interval SECONDS β€” the interval in seconds to wait after a failure before retrying the transfer. use 0 for an exponential backoff. default is 0.
  • -rst-timeout SECONDS β€” maximum time after a failure to keep retrying. use 0 for no timeout. default is 0.
  • -stall-timeout SECONDS, -st SECONDS β€” how long before cancelling/restarting a transfer with no data movement. set to 0 to disable. default is 600 seconds.
  • -df FILENAME, -dumpfile FILENAME β€” path to a file where untransferred URLs will be saved for later restarting. the resulting file is the same format as the -f input file. if the file exists, it will be read and all other URL input will be ignored.
  • -do FILENAME, -dump-only FILENAME β€” perform no write operations on the destination. instead, all files that would be transferred are enumerated and dumped to the specified file. the resulting file is the same format as the -f input file. note: if you intend to use this file as input for a future transfer, the -create-dest option will be required if any destination directories do not already exist.
  • -rp, -relative-paths β€” the path portion of ftp URLs will be interpreted as relative to the user's starting directory on the server. by default, all paths are root-relative. when this flag is set, the path portion of the ftp URL must start with %2F if it designates a root-relative path.
  • -s SUBJECT, -subject SUBJECT β€” use this subject to match with both the source and dest servers.
  • -ss SUBJECT, -source-subject SUBJECT β€” use this subject to match with the source server.
  • -ds SUBJECT, -dest-subject SUBJECT β€” use this subject to match with the destination server.
  • -tcp-bs SIZE, -tcp-buffer-size SIZE β€” specify the size (in bytes) of the buffer to be used by the underlying ftp data channels.
  • -bs block SIZE, -block-size block SIZE β€” specify the size (in bytes) of the buffer to be used by the underlying transfer methods.
  • -p PARALLELISM, -parallel PARALLELISM β€” specify the number of parallel data connections that should be used. more lanes, more zoom πŸ¦‹
  • -notpt, -no-third-party-transfers β€” turn third-party transfers off (they're on by default).
  • -nodcau, -no-data-channel-authentication β€” turn off data channel authentication for ftp transfers.
  • -dcsafe, -data-channel-safe β€” set data channel protection mode to SAFE.
  • -dcpriv, -data-channel-private β€” set data channel protection mode to PRIVATE.
⚠️ Warning ⚠️ β€” despite having -dcpriv in its command line, globus-url-copy will silently fall back to an unencrypted data channel when connected to a server that does not support data channel encryption (e.g. dCache)! no cap, this is real. know it before you trust it. πŸ’€
  • -off, -partial-offset β€” offset for partial ftp file transfers, defaults to 0.
  • -len, -partial-length β€” length for partial ftp file transfers, used only for the source url, defaults the full file.
  • -list URL β€” list the files located at URL.
  • -stripe β€” enable striped transfers on supported servers.
  • -striped-block-size, -sbs β€” set layout mode and block size for striped transfers. if not set, server defaults will be used. if set to 0, Partitioned mode will be used. if set to > 0, Blocked mode will be used, with this as the block size.
  • -ipv6 β€” use ipv6 when available (EXPERIMENTAL).
  • -udt β€” use UDT, a reliable udp based transport protocol, for data transfers.
  • -g2, -gridftp2 β€” use GridFTP v2 protocol enhancements when possible.
  • -dp, -delayed-pasv β€” enable delayed passive.
  • -mn NAME, -module-name NAME β€” set the back-end storage module to use for both the source and destination in a GridFTP transfer.
  • -mp PARAMETERS, -module-parameters PARAMETERS β€” set the back-end storage module arguments to use for both the source and destination in a GridFTP transfer.
  • -smn NAME, -src-module-name NAME β€” set the back-end storage module to use for the source in a GridFTP transfer.
  • -smp PARAMETERS, -src-module-parameters PARAMETERS β€” set the back-end storage module arguments to use for the source in a GridFTP transfer.
  • -dmn NAME, -dst-module-name NAME β€” set the back-end storage module to use for the destination in a GridFTP transfer.
  • -dmp PARAMETERS, -dst-module-parameters PARAMETERS β€” set the back-end storage module arguments to use for the destination in a GridFTP transfer.
  • -aa FILE, -authz-assert FILE β€” use the assertions in FILE to authorize the access with both source and destination servers.
  • -saa FILE, -src-authz-assert FILE β€” use the assertions in this file to authorize the access with the source server.
  • -daa FILE, -dst-authz-assert FILE β€” use the assertions in this file to authorize the access with the dest server.
  • -cache-aa, -cache-authz-assert β€” cache the authz assertion for subsequent transfers.
  • -cache-saa, -cache-src-authz-assert β€” cache the src authz assertion for subsequent transfers.
  • -cache-daa, -cache-dst-authz-assert β€” cache the dst authz assertion for subsequent transfers.
  • -pipeline, -pp β€” enable pipelining support for multi-file ftp transfers. currently third-party transfers benefit from this. EXPERIMENTAL.
  • -concurrency, -cc β€” number of concurrent ftp connections to use for multiple transfers.
  • -nl-bottleneck, -nlb β€” use NetLogger to estimate speeds of disk and network read/write system calls, and attempt to determine the bottleneck component. it's giving detective πŸ”
  • -sp COMMANDS, -src-pipe COMMANDS β€” set the source end of a remote transfer to use piped in input with the given command line. do not use with -fsstack.
  • -DP COMMANDS, -dst-pipe COMMANDS β€” set the destination end of a remote transfer to write data to then standard input of the program run via the given command line. do not use with -fsstack.
  • -pipe COMMANDS β€” sets both -src-pipe and -dst-pipe to the same thing. two birds, one flag 🐦
  • -dcstack STACK, -data-channel-stack STACK β€” set the XIO driver stack for the network on both the source and the destination. both must be GridFTP servers. the stack should contain all network drivers to use, in the order specified from bottom to top (e.g. -dcstack tcp,gsi). if the gsi driver is not included in the stack and data channel authentication is enabled, it will be inserted above the transport driver in the stack.
  • -fsstack STACK, -file-system-stack STACK β€” set the XIO driver stack for the disk on both the source and the destination. both must be GridFTP servers. the stack should contain all file system drivers to use, in the order specified from bottom to top.
  • -src-dcstack STACK, -source-data-channel-stack STACK β€” set the XIO driver stack for the network on the source GridFTP server. see -dcstack above for description of the STACK string.
  • -src-fsstack STACK, -source-file-system-stack STACK β€” set the XIO driver stack for the disk on the source GridFTP server. see -fsstack above for description of the STACK string.
  • -dst-dcstack STACK, -dest-data-channel-stack STACK β€” set the XIO driver stack for the network on the destination GridFTP server. see -dcstack above for description of the STACK string.
  • -dst-fsstack STACK, -dest-file-system-stack STACK β€” set the XIO driver stack for the disk on the destination GridFTP server. see -fsstack above for description of the STACK string.
  • -cred PATH β€” set the credentials to use for both ftp connections.
  • -src-cred CRED-FILE, -sc CRED-FILE β€” set the credentials to use for source ftp connections.
  • -dst-cred CRED-FILE, -dc CRED-FILE β€” set the credentials to use for destination ftp connections.
  • -af FILENAME, -alias-file FILENAME β€” file with mapping of logical host aliases to lists of physical hosts. when used with multiple concurrent connections, each connection uses the next host in the list. each line should either be an alias, noted with the @ symbol, or a hostname[:port]. currently, only the aliases @source and @destination are valid, and they are used for every source or destination URL.
  • -sync β€” only transfer files where the destination does not exist or differs from the source. -sync-level controls how to determine if files differ.
  • -sync-level number β€” criteria for determining if files differ when performing a sync transfer. the default sync level is 2. the available levels are:
    • Level 0 will only transfer if the destination does not exist.
    • Level 1 will transfer if the size of the destination does not match the size of the source.
  • Level 2 will transfer if the time stamp of the destination is older than the time stamp of the source. lowkey the classic "is this file stale" vibe πŸ’…
    • Level 3 will perform a checksum of the source and destination and transfer if the checksums do not match. The default algorithm used for this checksum is MD5, but other algorithms can be specified with the -algo parameter. it's giving "trust issues, but make it cryptographic" ✨
  • -checksum-alg CHECKSUM-ALGORITHM β€” set the algorithm type to use for all checksum operations during the transfer. one algo to rule them all, periodt πŸŽ€
  • -verify-checksum β€” perform a checksum on the source and destination after each file transfer and compare the two. If they do not match, fail the transfer. The default algorithm used for this checksum is MD5, but other algorithms can be specified with the -checksum-alg parameter. no cap, if the vibes don't match, the whole thing goes down 😭

🌈 ENVIRONMENT 🌈

The following environment variables are recognized, bestie β€” set these and the client will actually listen πŸ‘‘:

  • GLOBUS_HOSTNAME β€” overrides client hostname communicated to the server πŸ¦‹
  • GLOBUS_DOMAIN_NAME β€” overrides client domainname communicated to the server 🌸
  • GLOBUS_FTP_CLIENT_DATA_IP β€” overwrites client IP address communicated to the server for the data connection. Used when the receiver is behind a NAT and should be configured to the external address of its gateway. basically: "hey, this is the face I show the world" πŸ’…
  • GLOBUS_FTP_CLIENT_SOURCE_PASV β€” configures sender side (source) instead of receiver side (destination) to open a data port and establishes the data connection from the receiver to the sender. By default the data connection is established from sender to receiver, but if the receiver is behind a NAT this doesn't work, because the receiver will communicate its own address instead of the external address of its gateway to the sender and its own address can't be reached directly from the sender. not me explaining NAT like it's a situationship 😭 the receiver is giving an address nobody can actually reach, so we flip who knocks on the door 🫢

πŸ’– AUTHOR πŸ’–

Copyright Β© 1999-2016 University of Chicago


and that's the whole page, bestie, we ate πŸ“ thank you for coming to my ted talk β€” this was Grid Community Toolkit 6, dated 09/08/2020, and it's literally GLOBUS-URL-COPY(1) the whole time πŸ’œ mwah, go copy some URLs responsibly ✨