다음 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
디렉터리가 발견되면 -prune
true 이므로 -type f
평가되지 않습니다.