조건문: 특정 파일이 포함되지 않은 폴더 찾기

조건문: 특정 파일이 포함되지 않은 폴더 찾기

이름에 숫자가 포함되어 있고 .counts.txt로 끝나는 파일이 포함되어 있지 않은 모든 폴더를 찾아야 합니다. 온라인에서 찾은 몇 가지 제안을 결합하여 내가 원하는 작업을 수행하는 다음 명령(bash용)을 생각해낼 수 있었습니다.

find . maxdepth 1 -type d -name "*[0-9]*" ! -exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \; -print

그러나 일부 기능을 이해하지 못합니다.

  1. 여기서 느낌표는 무슨 역할을 하나요? 어떤 식으로든 다음 조건문을 부정합니까?
  2. sh직접 파이핑하는 대신 을 사용하여 새 쉘을 열어야 하는 이유는 무엇입니까 ls?

답변1

  1. 예, !다음 조건을 부정합니다. 즉 , -exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \;이것이 -exec부정 조건이므로 실행하는 명령이 상태 0을 반환하면 참이라는 것을 기억해야 합니다(상태가 0이 아니면 부정 조건은 true입니다).
  2. 그 이후의 매개변수는 -exec쉘에 전달되지 않고 직접 실행되므로 사용 가능한 파이프 개념이 없습니다. 거기에 파이프 문자를 넣으면 쉘(자체 검색 시작)이 이를 사용하고모두find의 출력은 egrep으로 전송됩니다.

man find참고 자료의 문서 !-exec조회 매개변수를 참조하세요 .

관련 정보