![ln -s는 프로세스 실패를 보고하지만 여전히 심볼릭 링크를 생성합니다.](https://linux55.com/image/112223/ln%20-s%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EC%8B%A4%ED%8C%A8%EB%A5%BC%20%EB%B3%B4%EA%B3%A0%ED%95%98%EC%A7%80%EB%A7%8C%20%EC%97%AC%EC%A0%84%ED%9E%88%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4..png)
상위 디렉터리와 다른 하위 디렉터리에 확장자가 .fastq, .fq, .fastq.gz 및 .fq.gz인 파일이 많이 있습니다. FASTQC라는 하위 디렉터리를 만들었으며 해당 하위 디렉터리 내의 모든 하위 디렉터리에 대한 기호 링크를 만들고 싶습니다.
내가 시도할 때:
find "$PWD" \( ! -path "$PWD/FASTQC" -type f -name *.f*q -o -name *.f*q.gz \) -exec ln -sv {} "$PWD/FASTQC" \;
FASTQC의 모든 파일에 대한 심볼릭 링크를 받았지만 다음과 같은 오류 메시지도 받았습니다.
ln: failed to create symbolic link '/XXX/YYY/ZZZ/aaa.fastq.gz': File exists
다음 두 명령을 실행하면 오류 메시지 없이 모든 심볼릭 링크가 생성됩니다.
find "$PWD" \( ! -path "$PWD/FASTQC" -type f -name *.f*q \) -exec ln -sv {} "$PWD/FASTQC" \;
find "$PWD" \( ! -path "$PWD/FASTQC" -type f -name *.f*q.gz \) -exec ln -sv {} "$PWD/FASTQC" \;
첫 번째 명령을 사용할 때 오류 메시지가 나타나는 이유는 무엇입니까?
편집: 나중에 Google을 통해 이 문제를 발견한 경우를 대비해 최종 작업 버전은 다음과 같습니다(감사합니다 ilkkachu
) steeldriver
.
find "$PWD" ! -path "$PWD/FASTQC" -type f \( -name "*.f*q" -o -name "*.f*q.gz" \) \
-exec ln -sv {} "$PWD/FASTQC" \;
답변1
( ! -path "..." -type f -name ... -o -name ...gz ) -exec ...
다음과 같이 구문 분석됩니다.
( ( ! -path "..." -type f -name ... ) -o ( -name ...gz ) ) -exec ...
왜냐하면 (암묵적으로)그리고결합력이 생각보다 강해요또는. 당신은 원할 수도 있습니다
! -path "..." -type f ( -name ... -o -name ...gz ) -exec
! -path
(및 -type
) 필터도 파일에 적용되도록 합니다 *.gz
. 궁극적으로 -exec
이는 암묵적인 부분이기도 합니다.그리고체인이므로 중간 쌍을 제외하고 -o
작업을 괄호로 묶을 필요가 없습니다 .
완전한 표현을 사용하세요:
find "$PWD" ! -path "$PWD/FASTQC" -type f \( -name *.f*q -o -name *.f*q.gz \) \
-exec ln -sv {} "$PWD/FASTQC" \;