чтение нескольких файлов приводит к получению последовательных файлов «Отказано в доступе» - PullRequest
1 голос
/ 11 октября 2019

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

Есть идеи?

Я проверил права доступа к папке и установил для chmod значение 755, но проблема сохраняется.

RAW_DIR=/gpfs/ts0/projects/Research/sequencing/H0243/01_raw_reads/
FILES=`ls -m ${RAW_DIR}3013_12_r1.fq.gz|${RAW_DIR}3013_12_r2.fq.gz|${RAW_DIR}3013_14_r1.fq.gz|${RAW_DIR}3013_14_r2.fq.gz|${RAW_DIR}3013_15_r1.fq.gz|${RAW_DIR}3013_15_r2.fq.gz|${RAW_DIR}3013_16_r1.fq.gz|${RAW_DIR}3013_16_r2.fq.gz|${RAW_DIR}3013_31_r1.fq.gz|${RAW_DIR}3013_31_r2.fq.gz|${RAW_DIR}3013_33_r1.fq.gz|${RAW_DIR}3013_33_r2.fq.gz|${RAW_DIR}3013_34_r1.fq.gz|${RAW_DIR}3013_34_r2.fq.gz|${RAW_DIR}3013_36_r1.fq.gz|${RAW_DIR}3013_36_r2.fq.gz|${RAW_DIR}3013_mCh1_r1.fq.gz|${RAW_DIR}3013_mCh1_r2.fq.gz|${RAW_DIR}3013_mCh2_r1.fq.gz|${RAW_DIR}3013_mCh2_r2.fq.gz|${RAW_DIR}3013_mCh3_r1.fq.gz|${RAW_DIR}3013_mCh3_r2.fq.gz|${RAW_DIR}3013_mCh4_r1.fq.gz|${RAW_DIR}3013_mCh4_r2.fq.gz|${RAW_DIR}3013_nc1_r1.fq.gz|${RAW_DIR}3013_nc1_r2.fq.gz| sed 's/ //g'`

Я ожидаю, что файлы будут прочитаныпо одному успешно, но в данный момент все файлы считываются после первой успешной ошибки файла с «Отказано в доступе».

1 Ответ

1 голос
/ 11 октября 2019

Поскольку вы используете символы канала в команде

ls -m ${RAW_DIR}3013_12_r1.fq.gz|${RAW_DIR}3013_12_r2.fq.gz|${RAW_DIR}3013_14_r1.fq.gz ...

, вы только передаете первое имя файла в качестве аргумента ls -m и создаете канал. Это означает, что оболочка соединит выход одной программы со входом следующей программы. Оболочка попытается выполнить ${RAW_DIR}3013_12_r2.fq.gz, ${RAW_DIR}3013_14_r1.fq.gz и т. Д. В качестве программ.

Скорее всего, эти файлы не являются исполняемыми, поэтому вы получаете сообщение об ошибке. (Файл не имеет разрешения на выполнение.) И, скорее всего, это не то, что вам нужно.

Если вы хотите указать более одного аргумента (имени файла) для программы, разделите аргументы пробелом.

Может быть, вы хотите что-то вроде

FILES=`ls -m ${RAW_DIR}3013_12_r1.fq.gz ${RAW_DIR}3013_12_r2.fq.gz ${RAW_DIR}3013_14_r1.fq.gz ${RAW_DIR}3013_14_r2.fq.gz ${RAW_DIR}3013_15_r1.fq.gz ${RAW_DIR}3013_15_r2.fq.gz ${RAW_DIR}3013_16_r1.fq.gz ${RAW_DIR}3013_16_r2.fq.gz ${RAW_DIR}3013_31_r1.fq.gz ${RAW_DIR}3013_31_r2.fq.gz ${RAW_DIR}3013_33_r1.fq.gz ${RAW_DIR}3013_33_r2.fq.gz ${RAW_DIR}3013_34_r1.fq.gz ${RAW_DIR}3013_34_r2.fq.gz ${RAW_DIR}3013_36_r1.fq.gz ${RAW_DIR}3013_36_r2.fq.gz ${RAW_DIR}3013_mCh1_r1.fq.gz ${RAW_DIR}3013_mCh1_r2.fq.gz ${RAW_DIR}3013_mCh2_r1.fq.gz ${RAW_DIR}3013_mCh2_r2.fq.gz ${RAW_DIR}3013_mCh3_r1.fq.gz ${RAW_DIR}3013_mCh3_r2.fq.gz ${RAW_DIR}3013_mCh4_r1.fq.gz ${RAW_DIR}3013_mCh4_r2.fq.gz ${RAW_DIR}3013_nc1_r1.fq.gz ${RAW_DIR}3013_nc1_r2.fq.gz| sed 's/ //g'`

Если вы хотите, чтобы все имена файлов в ${RAW_DIR}, вы можете использовать

FILES=$(ls -m ${RAW_DIR}*| sed 's/ //g')

или если вы хотите быть более конкретным

FILES=$(ls -m ${RAW_DIR}*.fq.gz| sed 's/ //g')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...