Copying between files

File copying can be used to:

Examples

Decompress example.csv.gz into example.csv:

source = IOStreams.path("example.csv.gz")
IOStreams.path("example.csv").copy_from(source)

Decrypt a file encrypted with Symmetric Encryption:

source = IOStreams.path("example.csv.enc")
IOStreams.path("example.csv").copy_from(source)

Encrypt a file using PGP encryption so that it can only be read by receiver@example.org.

source = IOStreams.path("example.csv")
target = IOStreams.path("example.csv.pgp")
target.option(:pgp, recipient: "receiver@example.org")
target.copy_from(source)

When the file name does not have file extensions that would allow IOStreams to infer what streams to apply, the streams can be explicitly set using stream.

In this example, the file CUSTOMER_DATA

Decrypt the contents of file that was encrypted with Symmetric Encryption PGP encrypt the output file and write it to xyz.csv.pgp using the pgp key that was imported for a@a.com.

input = IOStreams.path("CUSTOMER_DATA").stream(:enc)
IOStreams.path("xyz.csv.pgp").option(:pgp, recipient: "receiver@example.org").copy_from(input)

To copy a file without performing any conversions (ignore file extensions), set convert to false:

input = IOStreams.path("sample.json.zip")
IOStreams.path("sample.copy").copy_from(input, convert: false)