내 디렉토리 구조는 아래와 같습니다. 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
.Test3
Test3
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