I have to copy a set of files from one folder to another folder and I'm using the following command:cp -rf `head -n 100 /home/tmp/abc.txt` /home/tmp/test/filesthe file contents in abc.txt is like:./folder1/example.tar.gz./folder2/example.tar.gz./folder3/example.tar.gzBut while executing the above cp command I'm getting:cp: will not overwrite just-created `/home/tmp/test/files/example.tar.gz' with `./folder3 /example.tar.gz'cp: will not overwrite just-created `/home/tmp/test/files/example.tar.gz' with `./folder1/example.tar.gz'I can understand that because the name of the .gz files are the same that are showing in the error. What I want to do is to have the same folder structure inside /home/tmp/test/files as listed in abc.txt, like: /home/tmp/test/files/folder1/example.tar.gz/home/tmp/test/files/folder2/example.tar.gz/home/tmp/test/files/folder3/example.tar.gzBut I'm getting only one example.tar.gz inside files folder after executing the above cp command.So what is the way to get what I mentioned above?
copying files from one directory to another
files;directory;cp
cp won't workYour example as it stands will not work because copy doesn't copy directory structures, it will only copy the files, hence the error message you're encountering. To do a deep copy such as this you can enlist either the tar command and use the construct tar cvf - --files-from=... | (cd /home/tmp/test/files/; tar xvf -) or you can just use rsync.rsyncIf I were you I'd use rsync to do this like so:$ rsync -avz --files-from=abc.txt /src /home/tmp/test/files/.If you only want the 1st 100 lines from file abc.txt you can do this:$ rsync -avz --files-from=<(head -n 100 abc.txt) /src /home/tmp/test/files/.ExampleSample folder data:$ tree /home/saml/tmp/folder*/home/saml/tmp/folder1`-- example.tar.gz/home/saml/tmp/folder2`-- example.tar.gz/home/saml/tmp/folder3`-- example.tar.gzNow copy the files:$ rsync -avz --files-from=<(head -n 3 /home/saml/tmp/abc.txt) \         /home/saml/tmp/. /home/saml/tmp/test/files/.building file list ... done./folder1/folder1/example.tar.gzfolder2/folder2/example.tar.gzfolder3/folder3/example.tar.gzsent 3147093 bytes  received 81 bytes  6294348.00 bytes/sectotal size is 3145728  speedup is 1.00Confirm they were copied:$ tree /home/saml/tmp/test/files/home/saml/tmp/test/files|-- folder1|   `-- example.tar.gz|-- folder2|   `-- example.tar.gz`-- folder3    `-- example.tar.gztarIf you interested here's how you do it using just tar.$ cd /home/saml/tmp$ tar cvf - --files-from=<(head -n 3 /home/saml/tmp/abc.txt) | (cd /home/saml/tmp/test/files/; tar xvf -)./folder1/example.tar.gz./folder1/example.tar.gz./folder2/example.tar.gz./folder2/example.tar.gz./folder3/example.tar.gz./folder3/example.tar.gzConfirm that it copied:$ tree /home/saml/tmp/test/files/home/saml/tmp/test/files|-- folder1|   `-- example.tar.gz|-- folder2|   `-- example.tar.gz`-- folder3    `-- example.tar.gz