이름에 숫자가 포함되어 있고 .counts.txt로 끝나는 파일이 포함되어 있지 않은 모든 폴더를 찾아야 합니다. 온라인에서 찾은 몇 가지 제안을 결합하여 내가 원하는 작업을 수행하는 다음 명령(bash용)을 생각해낼 수 있었습니다.
find . maxdepth 1 -type d -name "*[0-9]*" ! -exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \; -print
그러나 일부 기능을 이해하지 못합니다.
- 여기서 느낌표는 무슨 역할을 하나요? 어떤 식으로든 다음 조건문을 부정합니까?
sh
직접 파이핑하는 대신 을 사용하여 새 쉘을 열어야 하는 이유는 무엇입니까ls
?
답변1
- 예,
!
다음 조건을 부정합니다. 즉 ,-exec sh -c 'ls -1 "{}" | egrep -q "*.counts.txt"' \;
이것이-exec
부정 조건이므로 실행하는 명령이 상태 0을 반환하면 참이라는 것을 기억해야 합니다(상태가 0이 아니면 부정 조건은 true입니다). - 그 이후의 매개변수는
-exec
쉘에 전달되지 않고 직접 실행되므로 사용 가능한 파이프 개념이 없습니다. 거기에 파이프 문자를 넣으면 쉘(자체 검색 시작)이 이를 사용하고모두find의 출력은 egrep으로 전송됩니다.
man find
참고 자료의 문서 !
및 -exec
조회 매개변수를 참조하세요 .