내가 가진 것:
다음 명령을 사용하여 다음 파일 구조를 만들었습니다.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
이상, 예를 들어 zsh
GNU에 액세스할 가능성이 높음) 을 사용해야 할 수도 있습니다 .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"가 없는 경우에만 디렉토리 이름을 인쇄합니다.