Arquivos específicos do Linux cp de uma lista de arquivos de texto para subdiretórios de uma lista de texto também?

Arquivos específicos do Linux cp de uma lista de arquivos de texto para subdiretórios de uma lista de texto também?

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 $value2em /pasta de destino/$value1

Responder1

A maneira como fiz isso no passado foi usando tarcomo 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 tarpega o --files-fromque espera uma lista linha por linha de caminhos completos para arquivos e cria um tarball para stdout.

O segundo tarmuda para o caminho de destino -Ce descompacta o tarball recebido do pipe.

Isso resulta na seguinte saída (ao usar -vo 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

informação relacionada