Скрипт для перестановки файлов в правильные папки - PullRequest
0 голосов
/ 30 марта 2020

У меня есть CSV-файл с тремя столбцами: в первом столбце есть две разные записи: плохая или хорошая. Отличительными записями в столбце 2 являются изучение, запрос и проверка, а в третьем столбце указаны имена путей к файлам, которые указывают, где найти файл.

bad test vff/v1/room_10-to-room_19_CDFFN5D5_x_0000  
bad test vff/v1/room_10-to-room_19_BVFGFGN5D5_x_0023  
bad learn vff2/v3/room_01-to-room_02_ERTY8LOK_x_00039  
bad learn vff/v3/room_01-to-room_02_TRT8LOK_x_00210  
bad query vff/v3/room_16-to-room_08_56TCS95_y_00020  
bad query vff2/v3/room_16-to-room_08_856C6S95_y_00201  
good test person/room_44/exit_call_room__5818     
good test person/room_34/cleaning_pan__812   
good learn person/room_43/walking_in_cafe_edited__717  
good learn person/room_54/enterit_call_room__387  
good query person/room_65/talki_speech_cry__1080  
good query person/room_75/walking_against_wall__835 

Используя этот CSV, я хотел создать три папки на основе столбца 2. Поэтому в основном используйте столбец 2 для создания трех папок, а именно: test, learn и query. В каждой из этих 3 папок я хочу создать две папки iebad и good на основе столбца 1. Затем можно получить данные, используя column3, и поместить соответствующие файлы в эти определенные папки. Есть ли python или командный скрипт, который может это сделать?

1 Ответ

0 голосов
/ 30 марта 2020

Предполагается, что этот CSV-файл называется file.csv

#!/bin/bash
FILE="file.csv"

# Create direcory structure
for C2 in `cat ${FILE} | cut -f 2 -d ',' | sort -u`
do
    for C1 in `cat ${FILE} | cut -f 1 -d ',' | sort -u`
    do
        mkdir -p "${C2}/${C1}"
    done
done

# Move files
while IFS= read -r line
do
    file="$(echo $line | cut -f 3 -d ',' | tr -d ' ')"
    dir="$(echo $line | cut -f 2 -d ',' | tr -d ' ')"
    dir+="/$(echo $line | cut -f 1 -d ',')"
    mv "${file}" "${dir}"
done < "${FILE}"

Некоторые вещи, которые происходят в этом bash сценарии:

  1. cut Эта команда очень полезна для выбора элемента n'th из списка delimiter. В этом случае мы работаем с csv, поэтому вы увидите cut -d ',' для указания запятой в качестве разделителя.
  2. Создание структуры каталогов: столбец 2 - это каталог parent и Столбец 1 является каталогом child , поэтому список cut -f 2 является внешним для l oop, а cut -f 1 является внутренним для l oop
  3. sort -u, удаляет повторные вхождения строки. Это позволяет нам перебирать все различные записи для данного столбца
  4. Перемещение файлов: Каждая строка в file.csv содержит файл, который необходимо переместить, таким образом, итерация по каждому строка в файле. Затем созданный ранее каталог извлекается из столбцов 2 и 1, и файл перемещается в новый дом
...