찾기 출력의 파일 이름을 문자열로 결합하는 방법

찾기 출력의 파일 이름을 문자열로 결합하는 방법

이를 사용하여 find특정 패턴을 가진 모든 파일을 찾는 것은 간단합니다.

find . -name \*.jar

이 명령의 결과(예: 모든 파일 이름)를 하나의 분리된 문자열로 결합하려면 어떻게 해야 합니까 :?

예상 결과는 다음과 유사합니다.

"./foo.jar:./bar.jar"

귀하의 배려와 응답에 미리 감사드립니다.

답변1

find . -name \*.jar -printf '%P:'

답변2

find . -name \*.jar | tr '\n' ':'

답변3

find . -name '*.jar' | paste -sd : -

그러나 이 방법은 파일이나 디렉터리 이름에 개행 문자가 포함되어 있으면 제대로 작동하지 않습니다.

이 문제를 해결하려면 GNU 시스템에서 다음을 사용할 수 있습니다.

find . -name '*.jar' -print0 | paste -zsd: | tr '\0' '\n'

물론, 파일이나 디렉터리 이름에 문자가 포함되어 있으면 건너뛰도록 :지시할 수 있지만 할 수 있는 일은 많지 않습니다.find

LC_ALL=C find . -name '*:*' -prune -o -name '*.jar' -print0 |
  paste -zsd: | tr '\0' '\n'

그리고 zsh:

set -o extendedglob # best in ~/.zshrc
jar_files=(**/*.jar~*:*(ND))
printf '%s\n' ${(j/:/)jar_files}

관련 정보