텍스트 파일의 이름을 기반으로 파일을 새 디렉터리에 심볼릭 링크하는 방법은 무엇입니까?

텍스트 파일의 이름을 기반으로 파일을 새 디렉터리에 심볼릭 링크하는 방법은 무엇입니까?

라는 디렉토리가 있습니다 STRBAM. 그 중 .bam다른 디렉터리에서 다음과 같은 파일이 있습니다 .symbolic linked

Sample-CK-4952-01A-01D-1719-10.bam
Sample-A6-5656-01A-21D-A270-10.bam
Sample-AZ-4315-01A-01D-1408-10.bam
Sample-T9-A92H-01A-11D-A36X-10.bam
Sample-DY-A1H8-01A-21D-A152-10.bam
Sample-DC-5869-01A-01D-1657-10.bam
Sample-CI-6623-01B-11D-1826-10.bam
Sample-AA-3980-01A-02W-0995-10.bam
Sample-F4-6569-01A-11D-1771-10.bam

All.txt또한 같은 디렉터리에 다음과 같은 정보가 포함된 텍스트 파일이 있습니다.

    submitter_id                    Patient
Sample-CK-4952-01A-01D-1719-10  Sample-CK-4952
Sample-A6-5656-01A-21D-A270-10  Sample-A6-5656
Sample-AZ-4315-01A-01D-1408-10  Sample-AZ-4315
Sample-T9-A92H-01A-11D-A36X-10  Sample-T9-A92H
Sample-DY-A1H8-01A-21D-A152-10  Sample-DY-A1H8
Sample-DC-5869-01A-01D-1657-10  Sample-DC-5869

다른 디렉토리가 있습니다 NEW. 디렉토리에 있는 파일 .bam의 정보를 사용하여 파일을 디렉토리에 심볼릭 링크 하고 싶습니다.All.txtSTRBAMNew

디렉터리의 출력은 다음과 같아야 합니다 New.

Sample-CK-4952-01A-01D-1719-10.bam
Sample-A6-5656-01A-21D-A270-10.bam
Sample-AZ-4315-01A-01D-1408-10.bam
Sample-T9-A92H-01A-11D-A36X-10.bam
Sample-DY-A1H8-01A-21D-A152-10.bam
Sample-DC-5869-01A-01D-1657-10.bam

awk다음을 수행하기 위해 명령을 사용하려고 시도했지만 파일의 정보를 사용하여 필요한 필수 파일만 연결하는 xargs대신 모든 파일을 연결했습니다.All.txt

awk 'NR > 1{ print $1 }' All.txt | xargs -I {} ln -s /path/to/STRBAM/* /path/to/New/

답변1

소스 경로 대신 a를 사용하므로 모든 파일을 /path/to/STRBAM/*여러 /path/to/New/번 연결하게 됩니다. 즉:*{}

awk 'NR > 1{ print $1 }' All.txt | xargs -I{} ln -s /path/to/STRBAM/{}.bam /path/to/New/

소스 디렉토리에 심볼릭 링크가 있는지 확인하기 위해 추가 검사를 추가하려면 작은 쉘 스크립트를 사용하고 소스 및 대상 디렉토리를 처음 두 위치 인수로 스크립트에 전달할 수 있습니다.

awk 'NR > 1{ print $1 }' All.txt | xargs sh -c '
 src=$1; shift
 dest=$1; shift
 for i do
   if [ -h "$src/${i}.bam" ]; then
     ln -s "$src/${i}.bam" "$dest"
   fi
 done
' sh /path/to/STRBAM /path/to/New

관련 정보