Linux cp определенные файлы из текстового списка файлов в подкаталоги из текстового списка тоже?

Linux cp определенные файлы из текстового списка файлов в подкаталоги из текстового списка тоже?

Я прошу вашей помощи в решении моей проблемы, потому что я застрял. Я объясняю вам ситуацию: я хочу скопировать файлы, путь к которым у меня есть в файле txt, в определенные подкаталоги, указанные во втором файле (у меня также есть полный файл csv, включающий эти 2 столбца: имя подкаталога ( $value1), путь к файлу ( $value2))

Мне удалось автоматически создать подкаталоги с помощью этой команды:

xargs mkdir -p </scripts/repertoires.csv

Я знаю, как скопировать все файлы в один каталог с помощью этой команды:

cat /scripts/fichiers.csv | xargs -I% cp% / destinationfolder

Но я не могу скопировать каждую строку, соответствующую файлу в подкаталог, который ему подходит. Чтобы быть более понятным, я хочу скопировать $value2в /папку назначения/$value1

решение1

Раньше я делал это, используя tarпосредника, но я уверен, что есть и другие решения, более элегантные, чем этот.

Где у нас есть список файлов, которые соответствуют определенным критериям IE:все файлы в /usr размером менее 1 МБ

$ find /usr -type f -size -1M

Которые мы хотим скопировать в указанное место /mnt/dst.

Вы можете использовать tar как вектор для упаковки/распаковки данных. IE

$ find /usr -type f -size -1M | tar --files-from=- -c | tar -xv -C /mnt/dst

Первый tarберет --files-from, который ожидает построчный список полных путей к файлам и создает tarball для stdout.

Второй tarпереключается на путь назначения -Cи распаковывает tarball, полученный из конвейера.

Это приводит к следующему выводу (при использовании -vво второй команде 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
...
...

Полученный каталог назначения создает (обрезанное для удобства чтения) дерево, которое и должно быть тем, что вы ищете.

# 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

Связанный контент