find 명령의 "..." 여러 줄 출력을 교체합니다.

find 명령의 "..." 여러 줄 출력을 교체합니다.

find발견된 각 파일을 처리하려면 명령 출력을 다른 명령으로 바꿔야 합니다 . 예를 들면 다음과 같습니다.

mdls `find ~/target_dir/ -iname '*some*' -depth 1`

( mdls지정된 파일의 메타데이터 속성을 가져오는 OS X의 명령입니다. 파이프를 지원하지 않으므로 find ... | mdls실패합니다.)

위 명령은 제대로 작동하지만 이름에 공백이 있는 파일에서는 예상대로 실패합니다. 따옴표를 추가하면 sed문제 해결에 도움이 될 것 같습니다 .

$ find ~/target_dir/ -iname '*some*' -depth 1 | sed 's/\(.*\)/"\1"/'
"/Users/shau-kote/target_dir//secondsomefile"
"/Users/shau-kote/target_dir//some file with spaces in name"
"/Users/shau-kote/target_dir//somefile"

아아, 이제 mdls모든 파일에 대해 내 명령이 실패합니다.

$ mdls `find ~/target_dir/ -iname '*some*' -depth 1 | sed 's/\(.*\)/"\1"/'`
"/Users/shau-kote/target_dir//secondsomefile": could not find "/Users/shau-kote/target_dir//secondsomefile".

mdls의 모든 파일 이름이 표시되도록 하려면 어떻게 해야 합니까 find?

감사해요.

폴리스티렌이것이 중요한지 자명한지는 잘 모르겠지만,

mdls "/Users/shau-kote/target_dir//secondsomefile"

잘 작동합니다.

답변1

사용된 find명령 -exec:

find ~/target_dir/ -iname '*some*' -depth 1 -exec mdls {} \;

이는 mdls에서 찾은 모든 일치하는 파일 이름에 대해 실행됩니다 find. 모든 파일 이름, 심지어 공백이나 개행 문자 등이 포함된 파일 이름에서도 작동합니다.

mdls명령줄에서 여러 파일 이름을 사용할 수 있는 경우 명령을 종료하는 대신 을 -exec사용할 수 있습니다 . 예를 들어+\;

find ~/target_dir/ -iname '*some*' -depth 1 -exec mdls {} +

관련 정보