그것은 지정되지 않았지만, 누군가 관심이 있다면 정규 표현식이없는 솔루션이 있습니다.
우리가 사용할 수있는 find . -type f
사용 후 바로 파일을 얻을 수 dirname
및 basename
조건을 작성. 유틸리티에는 다음과 같은 동작이 있습니다.
$ find . -type f
./dir2/spam/spam.pdf
./dir2/dir2.tex
./dir3/dir3.pdf
./dir3/eggs/eggs.pdf
./dir1/dir1.pdf
./dir1/dir1.txt
basename
마지막 이후의 파일 이름 만 반환합니다 /
.
$ for file in $(find . -type f); do basename $file; done
spam.pdf
dir2.tex
dir3.pdf
eggs.pdf
dir1.pdf
dir1.txt
dirname
최종 경로까지 전체 경로를 제공합니다 /
.
$ for file in $(find . -type f); do dirname $file; done
./dir2/spam
./dir2
./dir3
./dir3/eggs
./dir1
./dir1
따라서 basename $(dirname $file)
파일의 상위 디렉토리를 제공합니다.
$ for file in $(find . -type f); do basename $(dirname $file) ; done
spam
dir2
dir3
eggs
dir1
dir1
해결책
위의 내용을 결합하여 conditional "$(basename $file)" = "$(basename $(dirname $file))".pdf
을 구성한 다음 find
해당 조건이 true를 반환하는 경우의 각 결과 만 인쇄하십시오 .
$ while read file; do if [ "$(basename "$file")" = "$(basename "$(dirname "$file")")".pdf ]; then echo $file; fi done < <(find . -type f)
./dir2/spam/spam.pdf
./dir3/dir3.pdf
./dir3/eggs/eggs.pdf
./dir1/dir1.pdf
./Final Thesis/grits/grits.pdf
./Final Thesis/Final Thesis.pdf
위의 예에서, 우리는 그 경우를 처리하기 위해 이름에 공백이있는 디렉토리 / 파일을 추가했습니다 (주석의 @Kusalananda 덕분에)