두 가지 유형의 파일(실행 파일과 텍스트 파일)을 찾아 해당 파일에 대한 소프트 링크를 만들고 싶습니다. 지금까지 내 솔루션은 다음과 같습니다.
find src -maxdepth 1 -not -type d -executable -exec ln -fs {} . \;; \
find src -name "*.txt" -exec ln -fs {} . \;
디렉토리 구조는 다음과 같습니다.
src
src/lapack
src/plasma
나는 및 하위 디렉터리의 실행 파일 src
과 텍스트 파일 만 원합니다.*.txt
lapack
plasma
find
두 호출을 하나로 결합하는 보다 우아한 솔루션을 찾고 싶습니다 . 해당 플래그를 사용해 보았지만 해당 옵션에 문제가 -o
발생했습니다 .-maxdepth
고쳐 쓰다:
내가 시도하는 결합 명령은 다음과 같습니다.
find src -maxdepth 1 -not -type d -executable -o -path src -name "*.txt"
그러나 하위 디렉터리에서는 텍스트 파일을 가져올 수 없습니다. 나는 이것이 -maxdepth 1
이전 플래그 때문이라고 생각합니다 -o
.
답변1
GNU find 또는 지원되는 다른 find 를 사용하여 이 작업을 수행할 수 있지만 -path
이보다 더 우아하다고 생각하지 않습니다.
find src \( -type f -executable ! -path 'src/*/*' -o -name '*.txt' \) \
-exec ln -fs {} . +
대신 zsh를 사용할 수 있습니다. 그것은글로벌 예선find 구문보다 더 간결합니다.
ln -sf src/*/*(N*.) src/**/*.txt .