
行き詰まっているので、問題を解決するためにあなたの助けを求めます。状況を説明します。txt ファイルにあるパスのファイルを、2 番目のファイルで指定された特定のサブディレクトリにコピーしたいのです (サブディレクトリの名前 ( $value1
)、ファイル パス ( $value2
) の 2 つの列を含む完全な csv ファイルもあります)
次のコマンドを使用してサブディレクトリを自動的に作成できました。
xargs mkdir -p </scripts/repertoires.csv
次のコマンドを使用して、すべてのファイルを 1 つのディレクトリにコピーする方法を知っています。
cat /scripts/fichiers.csv | xargs -I% cp% / destinationfolder
しかし、適切なサブディレクトリ内のファイルに対応する各行をコピーすることはできません。より明確にするために、$value2
/destination folder/にコピーしたいと思います。$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
最初のものは、ファイルへの完全なパスの行ごとのリストを想定し、標準出力に tarball を作成する をtar
受け取ります。--files-from
2 番目は、tar
宛先パスに切り替えて-C
、パイプから受信した tarball を解凍します。
これにより、次の出力が生成されます ( -v
2 番目の 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