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