아래 로그 파일을 찾으려고 합니다./usr/
$ echo /usr/**/log
/usr/bin/log /usr/lib/log /usr/local/Cellar/ruby/2.5.1/lib/ruby/gems/2.5.0/doc/rubygems-2.7.6/ri/Gem/Resolver/Molinillo/DependencyGraph/log /usr/local/Cellar/ruby/2.5.1/share/ri/2.5.0/system/Gem/Resolver/Molinillo/DependencyGraph/log
읽기 힘든 한 줄로 인쇄되어 있습니다.
$ for i in /usr/**/log; do echo $i; done
/usr/bin/log
/usr/lib/log
/usr/local/Cellar/ruby/2.5.1/lib/ruby/gems/2.5.0/doc/rubygems-2.7.6/ri/Gem/Resolver/Molinillo/DependencyGraph/log
/usr/local/Cellar/ruby/2.5.1/share/ri/2.5.0/system/Gem/Resolver/Molinillo/DependencyGraph/log
/usr/local/Cellar/ruby/2.5.1/share/ri/2.5.0/system/WEBrick/log
/usr/local/lib/python3.6/site-packages/zmq/log
/usr/local/lib/ruby/gems/2.5.0/doc/rubygems-2.7.6/ri/Gem/Resolver/Molinillo/DependencyGraph/log
/usr/local/var/log
/usr/share/zsh/5.3/help/log
구조화된 코드를 대체할 수 있는 한 줄 솔루션이 있습니까?
답변1
printf
개행 문자가 포함된 문자열을 인쇄하려면 포함 형식 지정자를 사용하세요 . 또한 그렇게 하지 말아야 할 타당한 이유가 없는 한 쉘 스크립트에서 변수를 참조하는 것은 항상 안전합니다.
nullglob
또한 확장되지 않은 전역 일치를 무시하는 옵션을 켜십시오.
shopt -s nullglob
printf '%s\n' /usr/**/log
답변2
사용 find
:
find /usr -name log
log
이것은 이름이 디렉토리 안이나 그 아래에 있는 모든 항목의 경로 이름을 찾는 이식 가능한 방법 입니다 /usr
. 일반 파일로 제한하려면 다음을 추가하세요 -type f
.
find /usr -type f -name log
echo
모든 피연산자를 공백 문자로 구분하고 끝에 개행 문자로 구분하여 한 줄에 인쇄합니다. 이것이 첫 번째 명령에서 여러 줄의 출력을 얻지 못하는 이유입니다.