bashスクリプトを使用したサブフォルダのナビゲーション

bashスクリプトを使用したサブフォルダのナビゲーション

誰でもbashスクリプトを使用してサブフォルダを繰り返し、fastqファイルを識別する方法を教えてください。

/project/samples/data/intensities/r1.fastq
/project/samples/data/intensities/r2.fastq
/project/samples/sample1.txt

デフォルトのディレクトリ/project/samples/だけが私のbashスクリプトに渡してfastqファイルを取得するには、サブフォルダを繰り返す必要があります。

答え1

そして探す注文する:

find /project/samples/ -name "*.fastq"

答え2

bash(通常shではない)では、次のものを使用できます。**/ワイルドカードパターンディレクトリを再帰的に移動します。まず、このオプションを設定する必要がありますglobstar。たとえば、次のmycommand各ファイル.fastqで実行するには、次のようにします/project/samples

#!/bin/bash
shopt -s globstar
for x in /project/samples/**/*.fastq; do
  mycommand "$x"
done

この機能はbash 4.0以降でのみ利用可能です(したがって、OSXのデフォルトのbashでは機能しませんが、zshでも使用できます)。 4.3以前のbashでは、ディレクトリへのシンボリックリンクも通過することに注意してください。

すべてのファイルに対して単一のコマンドを実行する必要がある場合は、次のことができます。

mycommand /project/samples/**/*.fastq

ただし、コマンドラインの長さに制限がある可能性があります。相対パスを使用すると、次のように役立ちます。

cd /project/samples
mycommand **/*.fastq

それでもそうでない場合は、すべてのファイル名をコマンドの引数として一度に渡すこととは無関係な操作を実行するための別の解決策を見つける必要があります。

答え3

#!/bin/bash

if [ ! -d "$1" ]; then
    printf 'Not a directory: %s\n' "$1" >&2
    exit 1
fi

find "$1" -type f -name "*.fastq" -print

これは、指定されたディレクトリにある fastq ファイルを簡単にリストする小さなスクリプトです。

各ファイルに対してコマンドを実行する場合は、最も簡単な方法は次をfind使用することです。

find "$1" -type f -name "*.fastq" -exec utility {} ';'

utilityコマンドラインからfastqファイルパスを取得するいくつかのプログラムはどこにあります({}fastqファイルパスを置き換えます)。

関連情報