2016-01-13 2 views
1

Я хотел бы запустить скрипт для каждой записи массива, в котором хранятся имена файлов, содержащие пробелы (включая новые строки). Как отправить такую ​​запись в скрипт с помощью GNU Parallel?Как подать GNU Параллельно с массивом, содержащим новые строки?

Кроме того, может ли сценарий получить два аргумента - его порядковый номер и имя файла?

+0

Ну, на самом деле мало комментировать. Команда 'parallel' должна запускать сценарий таким образом: ' ./script_name "имя файла с новыми строками", где имя файла является одним из элементов переменной 'files' оболочки (Bash). –

ответ

1

Решение использовать --null переключатель ГНУ параллельных (или его псевдоним -0), который говорит, что использовать разделитель NULL вместо новой строки. Таким образом, массивы с элементами, содержащими новые строки, могут быть переданы в GNU Parallel, например. как это:

parallel --gnu --null "command_to_be_executed" "{}" ::: "${array[@]}" 

Если вы хотите, чтобы команда, чтобы получить его порядковый номер, предшествуют "{}" с {#}.

Если вы пытаетесь использовать эту команду, чтобы обработать несколько файлов, чьи имена (или пути, ведущие к ним) могут содержать новые линии, вот пример того, как array может быть построена (новая линия сейф):

while IFS= read -r -d $'\0' file; do 
    files+=("$file") 
done < <(`find "/path/to/files/" -maxdepth 1 -name "*.csv" -print0"`)