Bash

如何在 mac 終端中一次性為文件夾中的多個文件執行命令?

  • June 12, 2018

如何在 mac 終端中為文件夾中的多個文件執行相同的命令?這些文件被命名為24538_7#1_paired1.fq, 24538_7#1_paired2.fq, 24538_7#2_paired1.fq, 24538_7#2_paired2.fq, 24538_7#3_paired1.fq, 24538_7#3_paired2.fq, 等等。

命令是:

STAR --runThreadN 12 --genomeDir indices/STAR --twopassMode Basic --readFilesIn data/24538_7#1_paired1.fq data/24538_7#1_paired2.fq --outFileNamePrefix results/STAR/ 

由於文件名涉及計數器,因此顯然需要更改文件名。

我試圖編寫命令,但它給出了分段錯誤。我對命令的努力如下:

for file in 24538_7#*.fq; do STAR --runThreadN 12 --genomeDir indices/STAR --twopassMode Basic --readFilesIn data/"${file%.fq}_paired1.fq" data/"${file%.fq}_paired2.fq" --outFileNamePrefix results/STAR/ ; done

(PS-我使用MacOS)

循環遍歷所有paired1.fq文件,對於每個這樣的文件,使用名稱來計算相應paired2.fq文件的名稱。然後用這些呼叫你的程序:

for paired1 in data/*paired1.fq; do
   paired2="${paired1%1.fq}2.fq"  # remove 1.fq from end of name and replace with 2.fq

   if [ ! -f "$paired2" ]; then
       printf 'Missing file:\t%s\n' "$paired2" >&2
       continue
   fi

   prefix="${paired1%_*}" # remove last underscore and everything after
   prefix="${prefix##*/}" # remove directory name from prefix

   # If $paired1 is the string "data/24538_7#1_paired1.fq", then
   # $prefix should now be "24538_7#1"

   mkdir -p "results/STAR/$prefix"

   STAR --runThreadN 12 --genomeDir indices/STAR --twopassMode Basic \
        --readFilesIn "$paired1" "$paired2" \
        --outFileNamePrefix "results/STAR/$prefix/"
done

引用自:https://unix.stackexchange.com/questions/449314