o cp não funciona
Seu exemplo, como está, não funcionará porque a cópia não copia as estruturas de diretório, ele copia apenas os arquivos, daí a mensagem de erro que você está encontrando. Para fazer uma cópia profunda como essa, você pode inscrever o comando tar
e usar a construção tar cvf - --files-from=... | (cd /home/tmp/test/files/; tar xvf -)
ou pode usar apenas rsync
.
rsync
Se eu fosse você, usaria rsync
para fazer isso da seguinte forma:
$ rsync -avz --files-from=abc.txt /src /home/tmp/test/files/.
Se você quiser apenas as primeiras 100 linhas do arquivo abc.txt
, você pode fazer isso:
$ rsync -avz --files-from=<(head -n 100 abc.txt) /src /home/tmp/test/files/.
Exemplo
Dados da pasta de amostra:
$ 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.gz
Agora copie os arquivos:
$ 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.gz
folder2/
folder2/example.tar.gz
folder3/
folder3/example.tar.gz
sent 3147093 bytes received 81 bytes 6294348.00 bytes/sec
total size is 3145728 speedup is 1.00
Confirme se foram copiados:
$ tree /home/saml/tmp/test/files
/home/saml/tmp/test/files
|-- folder1
| '-- example.tar.gz
|-- folder2
| '-- example.tar.gz
'-- folder3
'-- example.tar.gz
tar
Se você estiver interessado, veja como você faz isso usando apenas 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.gz
Confirme se copiou:
$ tree /home/saml/tmp/test/files
/home/saml/tmp/test/files
|-- folder1
| '-- example.tar.gz
|-- folder2
| '-- example.tar.gz
'-- folder3
'-- example.tar.gz