Как скопировать и скопировать каталоги с помощью csv?

Вы также можете использовать подсистему udev для установки параметров, когда устройство подключено или загружается машина.

Например, вот как я установил частоту линии электропитания на моем Logitech HD Pro C920 Веб-камера, которая, по словам lsusb, имеет USB-ID 046d:082d.

Как пользователь root создает новый читаемый во всем мире файл /etc/udev/rules.d/99-local-webcam.rules. Он содержит:

SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="082d", PROGRAM="/usr/bin/v4l2-ctl --set-ctrl power_line_frequency=1 --device /dev/%k"

Вы можете следовать одному и тому же рецепту, изменяя идентификатор USB и параметры lsusb в соответствии с вашими точными потребностями. Вы можете проверить параметры v4l-ctl из командной строки, пока вам не станет удобно, что они будут работать, а затем поместите этот текст в файл правил udev.

Преимущество этого подхода в том, что он «просто работает», , Каждый раз, когда устройство подключается, применяются настройки. Если вы являетесь системным администратором для многих машин, тогда вы можете выталкивать файлы правил для всего оборудования вашего учреждения, они не используются до тех пор, пока этот USB-ID не будет подключен к аппарату.

1
задан 1 November 2017 в 12:15

2 ответа

Предполагая:

В файле CSV есть один столбец. В строке есть одно имя папки. Первая строка - это заголовок и ее следует игнорировать

. Тогда такой цикл должен работать:

tail -n +2 file.csv | while read dirname; do cp -r "$dirname" /path/to/target/; done

Примечания:

CSV-файл имеет один столбец . Цикл while читает имена папок по очереди и для каждой строки выполняется cp -r
3
ответ дан 24 May 2018 в 00:58

Вы можете выбрать подмножество с разбиением массива bash, используя следующий фрагмент кода:

#!/bin/bash

a=(`tail -n +2 folders.csv`);
b=("${a[@]:$1:$2}");

for i in "${b[@]}"
do
    cp -r master_directory/"$i"/ new_path/;
done

Эта строка b=("${a[@]:$1:$2}"); позволяет передавать 2 аргумента в ваш скрипт и выбирать только папки между этими аргументы, например, если вы наберете:

$ bash script.sh 1 3

сценарий будет выбирать только папки между строкой 1 и строкой 3 (после игнорирования строки заголовка). В вашем случае он выберет 505, 666, 900 папок.

1
ответ дан 24 May 2018 в 00:58
  • 1
    как я могу указать new_path без необходимости редактировать script.sh снова? – csheth 2 September 2017 в 17:10
  • 2
    @ChintanSheth вы всегда можете добавлять пути и имена файлов и такие как аргументы; это немного головная боль, но это может быть выполнено . – Thomas Ward♦ 2 September 2017 в 17:12
  • 3
    хорошо спасибо @ThomasWard. Этот скрипт копирует содержимое 505, но не создает для него каталог. Но копирует 666 и 900 полностью. – csheth 2 September 2017 в 17:21

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

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