같은 이름의 파일을 이동하고 연결하는 방법

같은 이름의 파일을 이동하고 연결하는 방법

내 디렉토리 구조는 아래와 같습니다. Test3의 모든 폴더를 Test2로 이동하고 동일한 이름의 파일을 연결해야 합니다.

[jg@hpc Test2]$ tree
.
|-- Sample_1008
|   |-- 1008_ATCACG_L002_R1_001.fastq
|   |-- 1008_ATCACG_L002_R2_001.fastq
|   |-- 1008_ATCACG_L006_R1_001.fastq
|   `-- 1008_ATCACG_L006_R2_001.fastq
`-- Sample_1009
    |-- 1009_CGATGT_L002_R1_001.fastq
    |-- 1009_CGATGT_L002_R2_001.fastq
    |-- 1009_CGATGT_L006_R1_001.fastq
    `-- 1009_CGATGT_L006_R2_001.fastq

[jg@hpc Test3]$ tree
.
|-- Sample_1008
|   |-- 1008_ATCACG_L002_R1_001.fastq
|   |-- 1008_ATCACG_L002_R2_001.fastq
|   |-- 1008_ATCACG_L006_R1_001.fastq
|   `-- 1008_ATCACG_L006_R2_001.fastq
`-- Sample_1009
    |-- 1009_CGATGT_L002_R1_001.fastq
    |-- 1009_CGATGT_L002_R2_001.fastq
    |-- 1009_CGATGT_L006_R1_001.fastq
    `-- 1009_CGATGT_L006_R2_001.fastq

나는 노력했다

mv Test3/* /auto/dr-lc_sa1/Data/Test2

아무것도 작동하지 않지만 시도하면

cp -r Test3/* Test2/

그것은 덮을 것입니다.

파일을 연결하고 싶습니다. 마지막으로 Test2 디렉터리가 필요하며 각 샘플 아래에서 Test3 디렉터리의 fastq 파일이 Test2 디렉터리의 해당 fastq 파일에 연결됩니다.

답변1

파일을 연결하고 삭제하는 기본 제공 방법이 없으므로 두 단계로 나누어야 합니다.

zsh에서, 또는 bash ≥4에서 실행한 후 shopt -s globstar, 또는 ksh에서 실행한 후 set -o globstar:

cd Test3
for x in **/*.fastq; do
  cat "$x" >>"/auto/dr-lc_sa1/Data/Test2/$x" && rm "$x"
done

**하위 디렉터리로 재귀할 필요가 없습니다 find. .

cd Test3
find . -name '*.fastq' -exec sh -c 'cat "$0" >>"/auto/dr-lc_sa1/Data/Test2/$0" && rm "$0"' {} \;

및가 동일한 파일 시스템에 있고 대상에 해당 파일이 없는 파일이 아래에 많이 있는 경우 파일을 빈 파일에 연결하는 대신 파일을 이동하여 실행 시간을 절약할 수 있습니다 Test2.Test3Test3

for x in **/*.fastq; do
  if [ -s "../Test2/$x" ]; then
    cat "$x" >>"/auto/dr-lc_sa1/Data/Test2/$x" && rm "$x"
  else
    mv "$x" "/auto/dr-lc_sa1/Data/Test2/$x"
  fi
done

관련 정보