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

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

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

xargs mkdir -p </scripts/repertoires.csv

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

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

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

1
задан 27 September 2021 в 13:14
1 ответ

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

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

$ 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 для стандартного вывода.

Второй 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
1
ответ дан 27 September 2021 в 14:42

Теги

Похожие вопросы