결과를 여러 줄로 인쇄

결과를 여러 줄로 인쇄

아래 로그 파일을 찾으려고 합니다./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모든 피연산자를 공백 문자로 구분하고 끝에 개행 문자로 구분하여 한 줄에 인쇄합니다. 이것이 첫 번째 명령에서 여러 줄의 출력을 얻지 못하는 이유입니다.

관련 정보