读取多个文件导致连续的文件收到“权限被拒绝”

时间:2019-10-11 10:33:01

标签: linux shell unix

在使用级联语法将文件列表输入到程序中时,第一个文件似乎没有出错,但是在第一个文件之后的其余文件中出现错误“权限被拒绝”。不管第一个文件是什么,我都可以将列表的最后一个文件设置为第一个输入,并且它会被接受,但是此后的所有事情都会出现“ permission否认”错误。

有什么想法吗?

我已经检查了文件夹权限,并将此文件夹的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 个答案:

答案 0 :(得分:1)

由于您在命令中使用了竖线字符

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,然后创建管道。这意味着外壳程序会将一个程序的输出连接到下一个程序的输入。 Shell将尝试将${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')