GNU 찾기 - foo라는 하위 디렉터리를 포함하지 않는 디렉터리 목록

GNU 찾기 - foo라는 하위 디렉터리를 포함하지 않는 디렉터리 목록

내가 가진 것:

다음 명령을 사용하여 다음 파일 구조를 만들었습니다.mkdir dir{1..5} && mkdir dir{1,3,4}/foo

├── dir1
│   └── foo/
├── dir2
├── dir3
│   └── foo/
├── dir4
│   └── foo/
└── dir5

내가 원하는 것은:

나는 이 디렉토리를 포함하지 않는 디렉토리를 find나열하기 위해 GNU 명령을 사용하고 싶습니다 .foo/

지금까지 내 유일한 생각은 다음과 같습니다.

$ find . -type d -name 'foo' -exec dirname {} \; && echo '---' && find . -maxdepth 1 -type d
./dir1
./dir4
./dir3
---
.
./dir1
./dir4
./dir3
./dir2
./dir5

그런 다음 수동으로 비교해 보세요. 더 좋은 방법이 있을 것입니다!

답변1

디렉토리를 탐색하려면 쉘(GNU bash이상, 예를 들어 zshGNU에 액세스할 가능성이 높음) 을 사용해야 할 수도 있습니다 .find

# /-----+----- "for" loop: for iteration variable chosen from list after "in"
# |     |   
# |  /-------- iteration variable is called "dir" 
# |  |  |   
# |  |  |  /-- choose from list of all directories
# |  |  |  |
# v  v  v  v  
for dir in */ ; do
  [[ -d "${dir}/foo" ]] || echo "${dir}"
# ^^ ^^              ^^ ^^
#  \  |              /  |
#   --------+--------   |
#     |     |           |
#     |     \-------------  [[ ]] : check for condition
#     |                 |
#     \-------------------  -d : condition "path exists and is directory"
#                       |
#                       \-  || if condition fails, do what is after this

done

답변2

find . -type d -a  ! -exec /usr/bin/test -e "{}/foo" \; -print

디렉토리에 "foo"가 없는 경우에만 디렉토리 이름을 인쇄합니다.

관련 정보