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 파일 경로를 대체함).

관련 정보