
내가 지금 하는 일은:
a.txt가 포함된 디렉터리 찾기
find -type f -iname "a.txt" | sed -r 's|/[^/]+$||' > a_paths.txt
b.txt가 포함된 디렉터리 찾기
find -type f -iname b.txt | sed -r 's|/[^/]+$||' > b_paths.txt
인쇄 차이
comm -23 <(sort a_paths.txt ) <(sort b_paths.txt)
find
한 줄의 코드를 사용하여 이를 수행하는 효율적인 방법이 있습니까 ?
답변1
귀하가 find
지지 -execdir
하는 경우 -printf
:
find . -name a.txt -execdir [ ! -e b.txt ] \; -printf %h\\n
이라는 이름의 파일을 찾아 a.txt
형제가 있는지 확인하고 b.txt
, 그렇지 않은 경우 포함된 디렉터리의 이름을 출력합니다.
없음 -execdir
또는 -printf
:
find . -name a.txt -exec sh -c '
for file do
dir=${file%/*}
[ -e "$dir/b.txt" ] || printf "%s\n" "$dir"
done' sh {} +
또한 각 파일에 대해 명령을 실행하지 않기 때문에 더 효율적입니다.
답변2
그리고 zsh
:
printf '%s\n' **/*(D/e'{[[ -e $REPLY/a.txt && ! -e $REPLY/b.txt ]]}')
또는:
printf '%s\n' **/a.txt(D^e'{[[ -e $REPLY:h/b.txt ]]}':h)