Linux에서 여러 파일을 여러 폴더로 이동하는 방법은 무엇입니까?

Linux에서 여러 파일을 여러 폴더로 이동하는 방법은 무엇입니까?

*.fastq.gz많은 예제(R1 및 R2)에 대한 파일이 포함된 폴더가 있습니다 . 예를 들어 "Raw_WGS" 폴더에는 다음과 같은 파일이 여러 개 있습니다.

Sample_1_R1.fastq.gz, Sample_1_R2.fastq.gz, Sample_2_R1.fastq.gz, Sample_2_R2.fastq.gz, Sample_3_R1.fastq.gz, Sample_3_R2.fastq.gz

샘플 시퀀스의 이름에 따라 다른 하위 폴더가 있는 "Analytic"이라는 또 다른 폴더가 있습니다. 이름이 하위 폴더입니다

Sample_1, Sample_2, Sample_3

모든 샘플의 이름만 포함된 텍스트 파일이 있습니다. 즉, 이제 각 샘플과 파일을 "Analytic" 폴더의 이름을 기준으로 해당 하위 폴더로 이동 Sample_1, Sample_2, Sample_3하고 싶습니다 .*_R1.fastq.gz*_R2.fastq.gz

모든 샘플에 대해 이 작업을 한 번에 수행하는 방법을 알려주실 수 있나요? 이 명령을 사용하면 각 파일을 한 번에 이동할 수 있습니다 mv. 하지만 수천 개의 파일이 있습니다. 그래서 스크립트를 실행하여 이동하고 싶습니다. 제안 사항이 있으면 알려주시기 바랍니다.

답변1

내가 올바르게 이해했다면 이름이 포함된 파일이 필요하지 않습니다.파일 이름에 이미 있습니다.. 이 시도:

for i in *_R{1,2}.fastq.gz; do 
  # use `cp` to be sure it works
  cp "$i" /path/toAnalisys/"${i%_*}"
done

답변2

Samples.txt의 각 라인에 하나의 Sample_1 ~ 3이 포함되어 있다고 가정하면 xargs 명령을 설정하여 mv를 호출할 수 있습니다.

tree -F
< Samples.txt \
xargs -I {} -t mv -t Analysis/{}/ \
       Raw_WGS/{}_R1.fastq.gz  \
       Raw_WGS/{}_R2.fastq.gz ;
tree -F

결과:

Before move...
 .
├── Analysis/
│   ├── Sample_1/
│   ├── Sample_2/
│   ├── Sample_3/
│   ├── Sample_4/
│   └── Sample_5/
└── Raw_WGS/
    ├── Sample_1_R1.fastq.gz
    ├── Sample_1_R2.fastq.gz
    ├── Sample_2_R1.fastq.gz
    ├── Sample_2_R2.fastq.gz
    ├── Sample_3_R1.fastq.gz
    └── Sample_3_R2.fastq.gz

After move...
.
├── Analysis/
│   ├── Sample_1/
│   │   ├── Sample_1_R1.fastq.gz
│   │   └── Sample_1_R2.fastq.gz
│   ├── Sample_2/
│   │   ├── Sample_2_R1.fastq.gz
│   │   └── Sample_2_R2.fastq.gz
│   ├── Sample_3/
│   │   ├── Sample_3_R1.fastq.gz
│   │   └── Sample_3_R2.fastq.gz
│   ├── Sample_4/
│   └── Sample_5/
└── Raw_WGS/

관련 정보