면책조항: 저는 Mac OSX를 사용하고 있습니다. Bash 스크립트는 처리해야 하는 파일과 다른 디렉터리에 있습니다. 이제부터 나의 투쟁은 시작된다...
도움말 1: 생물정보학 도구의 입력 파일로 사용해야 하는 파일이 여러 개 있으며 각 파일은 상위 디렉터리의 하위 디렉터리에 있습니다. for 루프가 이 문제를 해결할 수 있다는 것을 알았습니다.
for file in ~/Desktop/parent\ folder/*/*.txt;
do exTool INPUT= ${file##*/} OUTPUT= ${file%.txt}_exd.txt
파일을 입력하고($file에 추가된 폴더 목록을 잘라냄) 파일을 출력하고 ".txt"를 제거하고 _exd.txt를 추가하고 싶습니다. 내가 얻는 오류는 입력이 폴더 목록을 전달한다는 것입니다. 특히 "상위\폴더"의 공백으로 인해 잘못된 입력 정보가 발생한다는 것입니다.
도움말 2: 첫 번째 경우의 확장으로, 입력과 동일한 하위 디렉터리에 파일을 출력하려면 특수 명령을 추가해야 합니까?
도움말 3: 각 하위 디렉터리에 2개의 파일(input_1.txt, input_2.txt)이 있고, 두 파일을 하나의 명령에 입력하고 싶은 경우입니다. for 루프 내에 중첩되어 있으면 스크립트는 어떻게 보일까요?
for file in ~/Desktop/parent\ folder/*/*.txt;
do bioTool INPUT1= ${file%.txt}_1.txt INPUT2= ${file%.txt}_2.txt OUTPUT= ${file%%.*}
출력의 경우 도구에서 첫 번째 및 두 번째 파일 출력과 확장자를 나타내기 위해 이름 끝에 숫자를 추가하므로 기본 파일 이름만 필요하다는 점에 유의하세요. 왠지 for 루프의 "in" 다음 부분이 잘못 수행된 것 같은 느낌이 듭니다. 이것은 무모한 해결책입니다. 스크립트를 파일과 다른 디렉터리에 넣습니다.
어떤 도움이라도 매우 감사하겠습니다. 좋아하고, 좋아하고, 받아들이고, 즐겨찾기합니다. 도움을 주셔서 감사합니다.
답변1
도움말 1
공백으로 인해 다음을 인용해야 합니다.
INPUT= "${file##*/}" OUTPUT= "${file%.txt}"_exd.txt
INPUT=
그런데 파일명과 파일명 사이에 공백이 있는 것이 좀 이상해 보입니다 .
도움말 3
input_1.txt
파일 이 있으면 ${file%.txt}_1.txt
.input_1_1.txt
정확한 파일 이름과 일치합니다.
for file in ~/Desktop/parent\ folder/*/input_1.txt; do
bioTool INPUT1= "${file}" INPUT2= "${file%_1.txt}_2.txt" OUTPUT= "${file%%.*}"
done
도움말 4
그것은 전혀 빈 껍질이 아닙니다.
하위 디렉토리로 변경
for file in ~/Desktop/parent\ folder/*/input_1.txt; do
subdir="${file%/*}"
pushd "$subdir" &>/dev/null
file="${file##*/}"
bioTool INPUT1= "${file}" INPUT2= "${file%_1.txt}_2.txt" OUTPUT= "${file%%.*}"
popd &>/dev/null
done