tar.gz 파일을 텍스트 파일에서 일치하는 것을 기반으로 다른 basename을 가진 디렉토리로 추출하십시오.


0

나는 수백 개의 폴더를 가지고 있는데, 일부는 tar.gz 파일과 함께 그리고 어떤 것은 bam 파일과 함께있다. 나는 다른 디렉토리에 tar.gz 파일을 추출하려고했다. tar.gz 파일이있는 폴더는 다음과 같습니다.

d1017f74-3a39-4427-af57-273e34247b49
           ├──--- UNCID_2207021.7b9569bc-f513-4b64-9a7c-7bb53b9be79b.110801_UNC12-SN629_0115_BD0DVEABXX_3_ACAGTG.tar.gz
5e2d5c52-596f-49bc-967c-42129abbacbf
           ├──--- UNCID_2208720.71b58051-3bf8-4dfb-a431-c8aceab7c799.110608_UNC13-SN749_0073_BD0CV8ABXX_2.tar.gz
2ef74f93-5da2-454c-aca2-d86c289eacb8
           ├──--- UNCID_2206802.25be50e7-7705-492d-a44a-0e40180d10c8.110901_UNC12-SN629_0127_BC025UABXX_1_CTTGTA.tar.gz
e01ca3e0-beb0-46b7-bb7c-f5b16f966918
           ├──--- UNCID_2521679.d817dcee-1322-4949-a6e9-138447e6fc56.140417_UNC13-SN749_0343_BC41HBACXX_5_CTTGTA.tar.gz
992a7083-28ce-4857-898e-9d4b4fbf2fa1
           ├──--- UNCID_2319278.bf92b8cc-9a5c-4e96-917c-c264fe588f8d.131118_UNC12-SN629_0336_AC31D0ACXX_5_ACTTGA.tar.gz

tar.gz 파일을 대상 디렉토리로 추출하려면 다음 명령을 사용하십시오.

find /path/to/directory -name '*.tar.gz' -execdir tar -C /path/to/targetdirectory -xzvf '{}' \;

이 명령은 아래와 같은 이름의 tar.gz 파일에 대해 fastq 파일을 출력합니다 :

110801_UNC12-SN629_0115_BD0DVEABXX.3_1.fastq
110801_UNC12-SN629_0115_BD0DVEABXX.3_2.fastq

110608_UNC13-SN749_0073_BD0CV8ABXX.2_1.fastq
110608_UNC13-SN749_0073_BD0CV8ABXX.2_2.fastq

110901_UNC12-SN629_0127_BC025UABXX.1_1.fastq
110901_UNC12-SN629_0127_BC025UABXX.1_2.fastq

이것은 내가 원하는 것이 아닙니다. Foldernames, tar.gz 파일 이름, 다음과 같은 샘플 이름을 가진 텍스트 파일이 있습니다.

FolderNames                                         Tar.gz files                                                                                 SampleNames
d1017f74-3a39-4427-af57-273e34247b49    UNCID_2207021.7b9569bc-f513-4b64-9a7c-7bb53b9be79b.110801_UNC12-SN629_0115_BD0DVEABXX_3_ACAGTG.tar.gz   S-E9-A1NA-11A
5e2d5c52-596f-49bc-967c-42129abbacbf    UNCID_2208720.71b58051-3bf8-4dfb-a431-c8aceab7c799.110608_UNC13-SN749_0073_BD0CV8ABXX_2.tar.gz    S-AO-A12H-01A
2ef74f93-5da2-454c-aca2-d86c289eacb8    UNCID_2206802.25be50e7-7705-492d-a44a-0e40180d10c8.110901_UNC12-SN629_0127_BC025UABXX_1_CTTGTA.tar.gz   S-AC-A23E-01A
e01ca3e0-beb0-46b7-bb7c-f5b16f966918    UNCID_2521679.d817dcee-1322-4949-a6e9-138447e6fc56.140417_UNC13-SN749_0343_BC41HBACXX_5_CTTGTA.tar.gz   S-C8-A8HR-01A
992a7083-28ce-4857-898e-9d4b4fbf2fa1    UNCID_2319278.bf92b8cc-9a5c-4e96-917c-c264fe588f8d.131118_UNC12-SN629_0336_AC31D0ACXX_5_ACTTGA.tar.gz   S-A8-A08A-01A

출력은 텍스트 파일에서 샘플 이름을 가져와야하며 아래와 같이 표시되어야합니다.

S-E9-A1NA-11A.3_1.fastq
S-E9-A1NA-11A.3_2.fastq

S-AO-A12H-01A.2_1.fastq
S-AO-A12H-01A.2_2.fastq

S-AC-A23E-01A.1_1.fastq
S-AC-A23E-01A.1_2.fastq

S-C8-A8HR-01A.5_1.fastq
S-C8-A8HR-01A.5_2.fastq

S-A8-A08A-01A.5_1.fastq
S-A8-A08A-01A.5_2.fastq

답변:


0

다음은 이와 비슷한 것입니까?

while read -r folder tarfile sample; do
  find /path/to/directory/"$folder" -name "$tarfile" -execdir sh -c '
        tar -C /path/to/targetdirectory -xzvf "$0";
        for f in *.fastq; do
            mv "$f" "$1.${f#*.}";
        done' {} "$sample" \;
done <Foldernames

나는 네가 필요하다고 확신하지 않는다. find 여기에 모든 것이 있지만, 당신의 설명은 정확히 무엇이 드러나는 지 밝히지 않습니다. /path/to 그 서브 디렉토리는 참조하기 때문에, 당신이 거기에서 무엇을하고 있는지를 알고 있다고 가정합니다 (그렇지 않으면 그렇게하지 않는 방법).


tar.gz 파일에서 필자는 출력으로 샘플 이름을 가진 fastq를 직접 필요로합니다. 그리고 당신의 코드에서 어디에서 텍스트 파일에 대해 언급 했습니까?
beginner

네가 파일 이름이 있다고 가정 했어. Foldernames. 이것은 추출 된 이름을 바꿉니다. fastq 요청한 파일.
tripleee

승인. "$ 1. $ {f # *.}"의 의미는 무엇입니까?
beginner

"$sample" ~으로 전달됩니다. $1. 매개 변수 대체 ${f#*.} 가치를 얻는다. $f 첫 번째 점을 통과하는 문자열의 시작 부분이 잘립니다. 점이 없으면 트리밍이 발생하지 않습니다.
tripleee

이것은 내가 가진 오류입니다. 찾기 : '0027045b-9ed6-45af-a68e-f55037b5184c, UNCID_2210188.c71ca9f7-248f-460c-b5d3-afb2c648fef2.110412_UNC13-SN749_0051_AB0168ABXX_4.tar.gz, S-B6-A0I8-01A \ r': 해당 파일 또는 디렉토리 없음
beginner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.