-prune을 사용하여 정리된 디렉터리 이름을 찾습니다.

-prune을 사용하여 정리된 디렉터리 이름을 찾습니다.

다음 find 명령을 작성했습니다.

find ./ \( -path "*work*" -o -path "*ncvlog_lib*" \) -prune -o -type f -not
-name "*.wlf" -not -name "*.vcd" -not -name "*.sim" -not -name "*vcs*"

명령은 한 줄로 호출됩니다. 나는 가독성을 위해 여기에서 중단했습니다.

유일한 문제는 -type f 매개변수를 제공했음에도 불구하고 잘린 디렉터리 이름을 인쇄한다는 것입니다. 예제 출력:

./cdl2verilog_files/test_synth/work
./cdl2verilog_files/test_synth/some_file1.txt
./cdl2verilog_files/test_synth/something_else.txt
./cdl2verilog_files/test_synth/another_file.v

work디렉토리입니다. 해당 내용은 출력에 포함되지 않으므로 필요에 따라 가지치기 작업을 수행할 수 있습니다. 그러나 디렉토리 자체는 인쇄됩니다. 해결책을 찾을 수없는 것 같습니다. 어떤 아이디어가 있나요?

그런데 저는 tcsh를 사용하고 있습니다.

답변1

-prune디렉터리의 내용은 제외하지만 디렉터리 자체는 제외하지 않습니다. 유일한 경우에 -prune이런 일이 발생합니다행동명령 으로 find. 다른 작업(예: -exec또는 -print)이 있는 경우 잘린 디렉터리 이름이 출력되지 않습니다. 따라서 -print명령 끝에 명시적인 명령을 추가하기 만 하면 됩니다 find. 예를 들어:

find ./ \( -path "*work*" -o -path "*ncvlog_lib*" \) -prune -o -type f  \
  -not -name "*.wlf" -not -name "*.vcd" -not -name "*.sim" -not -name "*vcs*" \
  -print

find그런데, -regex여러 조건자 대신 단일 조건자를 사용하여 명령을 단축/간소화 할 수 있습니다 -name. 예를 들어

find ./ \( -path "*work*" -o -path "*ncvlog_lib*" \) -prune -o -type f \
  -regextype awk -not -regex '.*\.(wlf|vcd|sim)$|.*vcs.*' -print

그러면 위의 첫 번째 버전과 동일한 출력이 생성됩니다.

답변2

내 생각엔 당신의 경우인 것 같아요

-prune -o -type f

모호함: -o"또는"을 의미하며 find디렉터리가 발견되면 -prunetrue 이므로 -type f평가되지 않습니다.

관련 정보