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中间人——但我确信还有其他比这更优雅的答案。

我们有一份符合特定条件的文件列表,例如:/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

相关内容