
Peço sua ajuda para resolver meu problema porque estou travado. Eu explico a situação para você: quero copiar arquivos cujo caminho tenho em um arquivo txt em subdiretórios específicos especificados em um segundo arquivo (também tenho um arquivo csv completo incluindo estas 2 colunas: nome dos subdiretórios ( $value1
), caminho do arquivo ( $value2
))
Consegui criar automaticamente os subdiretórios usando este comando:
xargs mkdir -p </scripts/repertoires.csv
Eu sei como copiar todos os arquivos para um único diretório usando este comando:
cat /scripts/fichiers.csv | xargs -I% cp% / destinationfolder
Mas não consigo copiar cada linha correspondente a um arquivo no subdiretório que lhe convém, para tentar ser mais claro quero copiar $value2
em /pasta de destino/$value1
Responder1
A maneira como fiz isso no passado foi usando tar
como intermediário - mas tenho certeza de que existem outras respostas mais elegantes do que essa.
Onde temos uma lista de arquivos que atendem a um critério específico, ou seja:todos os arquivos em /usr menores que 1M
$ find /usr -type f -size -1M
Que queremos copiar para o local /mnt/dst
.
Você pode usar tar como vetor para compactar/descompactar os dados. Ou seja
$ find /usr -type f -size -1M | tar --files-from=- -c | tar -xv -C /mnt/dst
O primeiro tar
pega o --files-from
que espera uma lista linha por linha de caminhos completos para arquivos e cria um tarball para stdout.
O segundo tar
muda para o caminho de destino -C
e descompacta o tarball recebido do pipe.
Isso resulta na seguinte saída (ao usar -v
o segundo comando tar).
usr/lib/grub/i386-pc/fdt.lst
usr/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py
usr/lib/python3.6/site-packages/pip/operations/__init__.py
usr/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py
usr/lib/python3.6/site-packages/setuptools/_vendor/__init__.py
usr/lib/python3.6/site-packages/slip/__init__.py
usr/lib/python3.6/site-packages/slip/_wrappers/__init__.py
usr/lib/python3.6/site-packages/asn1crypto/_perf/__init__.py
...
...
O diretório de destino resultante produz a árvore (podada para facilitar a leitura), que deve ser o que você está procurando.
# tree -L 3 /mnt/dst
/mnt/dst
└── usr
├── lib
│ ├── grub
│ ├── node_modules
│ └── python3.6
├── lib64
│ └── python3.6
├── local
│ └── share
└── share
├── crypto-policies
├── doc
├── groff
├── microcode_ctl
├── mime
├── pki
├── texlive
├── texmf
├── vim
└── X11
20 directories, 0 files