반응형
bash를 사용하여 문자열이 포함 된 첫 번째 폴더 이름 찾기
나는 Bash에서 이것을하고 싶습니다.
- 현재 디렉토리에서 이름에 "foo"가 포함 된 첫 번째 폴더를 찾습니다.
나는 find 명령을 가지고 놀았지만 약간 혼란 스럽습니다. 어떤 제안?
다음 -quit
옵션을 사용할 수 있습니다 find
.
find <dir> -maxdepth 1 -type d -name '*foo*' -print -quit
pattern="foo"
for _dir in *"${pattern}"*; do
[ -d "${_dir}" ] && dir="${_dir}" && break
done
echo "${dir}"
제공된 다른 쉘 솔루션보다 낫습니다.
- 패턴이 glob의 일부이고 루프 내부에서 확인되지 않으므로 거대한 디렉토리의 경우 더 빠릅니다.
- 패턴과 일치하는 디렉토리가 없을 때 실제로 예상대로 작동합니다 (
${dir}
비어 있음). =~
운영자에 의존하지 않기 때문에 POSIX 호환 쉘에서 작동합니다 (필요한 경우 패턴에 따라 다름)- 이름에 줄 바꿈이 포함 된 디렉토리에서 작동합니다 (vs.
find
).
예를 들면 :
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print | head -n1)
echo "$dir1"
또는 (더 나은 쉘 솔루션은 Adrian Frühwirth의 답변을 참조하십시오)
for dir1 in *
do
[[ -d "$dir1" && "$dir1" =~ foo ]] && break
dir1= #fix based on comment
done
echo "$dir1"
또는
dir1=$(find . -type d -maxdepth 1 -print | grep 'foo' | head -n1)
echo "$dir1"
@ hek2mgl 주석을 기반으로 헤드 -n1 편집
다음은 @chepner의 의견에 따라
dir1=$(find . -type d -maxdepth 1 -print | grep -m1 'foo')
또는
dir1=$(find . -name \*foo\* -type d -maxdepth 1 -print -quit)
반응형
'developer tip' 카테고리의 다른 글
웹 API 인증 기본 vs 베어러 (0) | 2021.01.08 |
---|---|
Notepad ++ 동일한 텍스트와 문자 추가에 대한 정규식 일치 바꾸기 (0) | 2021.01.08 |
doc / docx 파일을 마크 다운 또는 구조화 된 텍스트로 어떻게 변환 할 수 있습니까? (0) | 2021.01.07 |
cout << with char * 인수는 포인터 값이 아닌 문자열을 인쇄합니다. (0) | 2021.01.07 |
bash에서 mysql 명령을 실행하는 방법은 무엇입니까? (0) | 2021.01.07 |