7

The command touch {jan,feb,mar}-{Rep.xls,graph.xls} creates files I can't open:

feb-graph.xls jan-Rep.xls feb-Rep.xls mar-graph.xls jan-graph.xls mar-Rep.xls

So I created one template file 1.ods, saved with OO-Calc. Then I tried to copy this file using cp again in the same fashion as cp:

cp 1.ods {jan,feb,mar}{Rep.ods,graph.ods}  

but that doesnt work:

cp: target `margraph.ods' is not a directory

How do I copy a single file to multiple files?

2
  • when you give multiple args to cp it assumes you want to copy a lot of files to the last one -- which is then expected to be a directory; hence your error.
    – nik
    May 26, 2011 at 15:19
  • So, you want to copy a single file to multiple new files in one command?
    – nik
    May 26, 2011 at 15:20

2 Answers 2

13

Combine cat (retrieves the contents of a file) with tee (writes the content away to the files specified in the arguments):

cat 1.ods | tee {jan,feb,mar}-{Rep,graph}.ods >/dev/null

Alternative using shell redirection:

tee {jan,feb,mar}-{Rep,graph}.ods >/dev/null < 1.ods

In both cases, > /dev/null is a redirection that discards the duplicated contents (tee writes its input to each parameter and standard output).

2
  • 1
    +1, nice too! I seem to be biased towards for-loops ;-)
    – nik
    May 26, 2011 at 15:23
  • @nik: my previous answer included a for loop too, but this one-liner is more clear
    – Lekensteyn
    May 26, 2011 at 15:26
4

How about,

for file in {jan,feb,mar}-{Rep.xls,graph.xls}
do
  cp 1.ods $file
done
2
  • How this is executable? What execution type or language or filetype is it needs to be?
    – Kangarooo
    Aug 4, 2015 at 4:06
  • It is a bash script. This can be executed in a shell or save it to a .sh file and execute it
    – Rufus_12
    Apr 12, 2016 at 7:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .