обрабатывая множество изображений, которые имеют свои имена, хранящиеся в CSV-файле с терминала

Как скопировать все изображения во второй столбец CSV-файла и поместить их в новую папку с изображениями? Он имеет около 300 тыс. Изображений, поэтому мне интересно, есть ли у него быстрый способ (например, у меня 12 процессоров):

[jalal@goku cleaned_affenet_manually_annotated]$ head -5 modified_training_for_FER2013.csv ,subDirectory_filePath,expression 0,689/737db2483489148d783ef278f43f486c0a97e140fc4b6b61b84363ca.jpg,3 1,392/c4db2f9b7e4b422d14b6e038f0cdc3ecee239b55326e9181ee4520f9.jpg,6 2,468/21772b68dc8c2a11678c8739eca33adb6ccc658600e4da2224080603.jpg,6 3,944/06e9ae8d3b240eb68fa60534783eacafce2def60a86042f9b7d59544.jpg,3 [jalal@goku cleaned_affenet_manually_annotated]$ wc -l modified_training_for_FER2013.csv 283903 modified_training_for_FER2013.csv
0
задан 3 December 2017 в 23:14

4 ответа

Это должно помочь:

sed -r '1d;$d; s/^.*\/(.*\.jpg),./\1/g' mona.csv | xargs -i cp {} /path/to/images

Если файлы находятся в другом месте, но имеют имена в файле csv, то для их перемещения выполните:

sed -r '1d;$d; s/^.*\/(.*\.jpg),./\1/g' mona.csv | xargs -i cp /path/to/files/{} /path/to/images

Информация:

1d;1$: удаляет первую и последнюю строки
0
ответ дан 18 July 2018 в 01:56
echo ",subDirectory_filePath,expression 0,689/737db2483489148d783ef278f43f486c0a97e140fc4b6b61b84363ca.jpg,3 1,392/c4db2f9b7e4b422d14b6e038f0cdc3ecee239b55326e9181ee4520f9.jpg,6 2,468/21772b68dc8c2a11678c8739eca33adb6ccc658600e4da2224080603.jpg,6 3,944/06e9ae8d3b240eb68fa60534783eacafce2def60a86042f9b7d59544.jpg,3 " | sed -r '1d;s/,(.*\.jpg),.*/\1/' | while read f; do echo "copy $f to dir/$f"; done 1d; удаляет первую строку (заголовок). s / from / to / заменяет имя файла префиксом postfix на чистое имя файла. Команда while-Loop выполняет команду копирования, но вместо этого может выполнять копирование.

Возможно, имена каталогов не существуют (689, 392, ...). Если вы хотите сгладить иерархию файлов, это возможно, но может привести к перезаписи. cp --parents генерирует родительский dir (s), если они не существуют, afaik.

Работа над контуром напрямую будет выглядеть как

sed -r '...' modified_training_for_FER2013.csv | while ...

Использование 12 процессоров не поможет, афайк, поскольку узкое место должно быть File-IO, использование жесткого диска.

0
ответ дан 18 July 2018 в 01:56

Это должно помочь:

sed -r '1d;$d; s/^.*\/(.*\.jpg),./\1/g' mona.csv | xargs -i cp {} /path/to/images

Если файлы находятся в другом месте, но имеют имена в файле csv, то для их перемещения выполните:

sed -r '1d;$d; s/^.*\/(.*\.jpg),./\1/g' mona.csv | xargs -i cp /path/to/files/{} /path/to/images

Информация:

1d;1$: удаляет первую и последнюю строки
0
ответ дан 24 July 2018 в 17:29
echo ",subDirectory_filePath,expression 0,689/737db2483489148d783ef278f43f486c0a97e140fc4b6b61b84363ca.jpg,3 1,392/c4db2f9b7e4b422d14b6e038f0cdc3ecee239b55326e9181ee4520f9.jpg,6 2,468/21772b68dc8c2a11678c8739eca33adb6ccc658600e4da2224080603.jpg,6 3,944/06e9ae8d3b240eb68fa60534783eacafce2def60a86042f9b7d59544.jpg,3 " | sed -r '1d;s/,(.*\.jpg),.*/\1/' | while read f; do echo "copy $f to dir/$f"; done 1d; удаляет первую строку (заголовок). s / from / to / заменяет имя файла префиксом postfix на чистое имя файла. Команда while-Loop выполняет команду копирования, но вместо этого может выполнять копирование.

Возможно, имена каталогов не существуют (689, 392, ...). Если вы хотите сгладить иерархию файлов, это возможно, но может привести к перезаписи. cp --parents генерирует родительский dir (s), если они не существуют, afaik.

Работа над контуром напрямую будет выглядеть как

sed -r '...' modified_training_for_FER2013.csv | while ...

Использование 12 процессоров не поможет, афайк, поскольку узкое место должно быть File-IO, использование жесткого диска.

0
ответ дан 24 July 2018 в 17:29

Другие вопросы по тегам:

Похожие вопросы: