如何使用 XARGS 从 CSV 或 TEXT 文件复制文件列表?
How to use XARGS to copy file list from CSV or TEXT file?
我正在尝试使用 xargs 复制基于 csv/txt 文件的图像,不幸的是它只能复制 csv/txt 文件的最后一行。
运行 macOS
文件夹内容:
图片(文件夹)
img_1.jpg
img_2.jpg
img_3.jpg
img_4.jpg
img_5.jpg
file.csv
file.txt
file.csv 内容:
img_1.jpg
img_2.jpg
img_3.jpg
file.txt 内容:
img_1.jpg
img_2.jpg
img_3.jpg
已经试过:
$ cat file.csv | xargs -t -I [] find . -type f -name "[]*" -exec cp {} images/ \;
$ cat file.csv | xargs -t -I % cp % images/
$ cat file.csv | xargs -t -I % sh -c 'find . -type f -name %; cp % images/'
目标:
仅将 image_1.jpg、image_2.jpg 和 image_3.jpg 复制到图像文件夹
代码 1 输出:
$ cat file.csv | xargs -t -I [] find . -type f -name "[]*" -exec cp {} images/ \;
* -exec cp {} images/ ;img_1.jpg
* -exec cp {} images/ ;img_2.jpg
find . -type f -name img_3.jpg* -exec cp {} images/ ;
cp: images/img_3.jpg and ./images/img_3.jpg are identical (not copied).
注意:只有 image_3.jpg 已复制到图像文件夹
代码 2 输出:
$ cat file.csv | xargs -t -I % cp % images/
images/img_1.jpg
cp: img_1.jpg\r: No such file or directory
images/img_2.jpg
cp: img_2.jpg\r: No such file or directory
cp img_3.jpg images/
注意:同样,只复制了 image_3.jpg
代码 3 输出:
$ cat file.csv | xargs -t -I % sh -c 'find . -type f -name %; cp % images/'
images/img_1.img_1.jpg
cp: img_1.jpg\r: No such file or directory
images/img_2.jpg img_2.jpg
cp: img_2.jpg\r: No such file or directory
sh -c find . -type f -name img_3.jpg; cp img_3.jpg images/
./img_3.jpg
./images/img_3.jpg
注意:同样,只复制了 image_3.jpg
你的 file.csv
似乎有 \r\n
行尾("text" 格式来自 non-Unix/Linux OS-es),如果 file.csv
具有正确的文件路径(当前目录 afaics),那么就不需要 find
。
删除 \r
应该足以使其工作(例如通过 tr
):
cat file.csv | tr -d '\r' | xargs -t -I % cp -pvf % images/
我正在尝试使用 xargs 复制基于 csv/txt 文件的图像,不幸的是它只能复制 csv/txt 文件的最后一行。
运行 macOS
文件夹内容:
图片(文件夹)
img_1.jpg
img_2.jpg
img_3.jpg
img_4.jpg
img_5.jpg
file.csv
file.txt
file.csv 内容:
img_1.jpg
img_2.jpg
img_3.jpg
file.txt 内容:
img_1.jpg
img_2.jpg
img_3.jpg
已经试过:
$ cat file.csv | xargs -t -I [] find . -type f -name "[]*" -exec cp {} images/ \;
$ cat file.csv | xargs -t -I % cp % images/
$ cat file.csv | xargs -t -I % sh -c 'find . -type f -name %; cp % images/'
目标:
仅将 image_1.jpg、image_2.jpg 和 image_3.jpg 复制到图像文件夹
代码 1 输出:
$ cat file.csv | xargs -t -I [] find . -type f -name "[]*" -exec cp {} images/ \;
* -exec cp {} images/ ;img_1.jpg
* -exec cp {} images/ ;img_2.jpg
find . -type f -name img_3.jpg* -exec cp {} images/ ;
cp: images/img_3.jpg and ./images/img_3.jpg are identical (not copied).
注意:只有 image_3.jpg 已复制到图像文件夹
代码 2 输出:
$ cat file.csv | xargs -t -I % cp % images/
images/img_1.jpg
cp: img_1.jpg\r: No such file or directory
images/img_2.jpg
cp: img_2.jpg\r: No such file or directory
cp img_3.jpg images/
注意:同样,只复制了 image_3.jpg
代码 3 输出:
$ cat file.csv | xargs -t -I % sh -c 'find . -type f -name %; cp % images/'
images/img_1.img_1.jpg
cp: img_1.jpg\r: No such file or directory
images/img_2.jpg img_2.jpg
cp: img_2.jpg\r: No such file or directory
sh -c find . -type f -name img_3.jpg; cp img_3.jpg images/
./img_3.jpg
./images/img_3.jpg
注意:同样,只复制了 image_3.jpg
你的 file.csv
似乎有 \r\n
行尾("text" 格式来自 non-Unix/Linux OS-es),如果 file.csv
具有正确的文件路径(当前目录 afaics),那么就不需要 find
。
删除 \r
应该足以使其工作(例如通过 tr
):
cat file.csv | tr -d '\r' | xargs -t -I % cp -pvf % images/