
Я прошу вашей помощи в решении моей проблемы, потому что я застрял. Я объясняю вам ситуацию: я хочу скопировать файлы, путь к которым у меня есть в файле 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