我请求您帮助我解决问题,因为我陷入了困境。我向您解释了情况:我想复制我在 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