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 {} +