Как использовать XARGS для копирования списка файлов из файла CSV или TEXT? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь скопировать изображения на основе файла csv / txt, используя xargs, к сожалению, он может копировать только последнюю строку файла csv / txt.

Работает на macOS

СОДЕРЖАНИЕ ПАПКИ: изображения (папка)img_1.jpgIMG_2.jpgimg_3.jpgimg_4.jpgimg_5.jpgfile.csvfile.txt

file.csv CONTENT: img_1.jpgIMG_2.jpgimg_3.jpg

file.txt СОДЕРЖАНИЕ: img_1.jpgIMG_2.jpgimg_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

1 Ответ

0 голосов
/ 08 ноября 2019

Ваш file.csv, кажется, имеет \r\n конец строк ("текстовый" формат из не-Unix / Linux OS-ов), также, если file.csv имеет правильный путь к файлам (текущий каталог afaics), то естьнет необходимости в find. Удаление \r должно быть достаточно для его работы (например, через tr):

cat file.csv | tr -d '\r' | xargs -t -I % cp -pvf % images/
...