디렉토리 트리의 모든 파일에 대해 명령을 실행하는 가장 좋은 방법

디렉토리 트리의 모든 파일에 대해 명령을 실행하는 가장 좋은 방법

이를 수행하는 방법에는 루프, 찾기 및 쉘 스크립트의 xargs를 포함하여 여러 가지가 있습니다. 이 중 어떤 것이 가장 좋고 어떤 것이 가장 휴대성이 좋습니까?

답변1

find . -exec <command> {} \;

현재 디렉토리가 트리의 루트이거나 일반적으로 다음과 같습니다.

find <directory> -exec <command> {} \;

답변2

파일 또는 디렉터리 이름에 공백이 포함되어 있으면 -print0찾기 옵션과 -0대상 옵션을 사용하세요.xargs

find {dir} -print0 | xargs -0r {command}

find 옵션은 -print0파일 이름을 NUL공백으로 구분된 목록이 아닌 --separated 목록 으로 인쇄하고 -0공백 대신 공백으로 입력을 중단하도록 지시합니다 xargs. 유닉스 파일 이름에 허용되지 않는 문자 중 하나 NUL이므로 NUL파일 이름의 일부로 착각하는 것은 불가능하다.

옵션 -r이 있으므로 xargs입력하지 않아도 오류가 발생하지 않습니다.

답변3

이식성이 문제라면 쉘 전용 접근 방식을 피하겠습니다. (다양한 쉘을 사용하는 사람들이 많지만 일반적으로 find 및 xargs는 누구도 감히 급진적인 방식으로 변경할 수 없는 매우 기본적인 도구입니다.)

find 및 xargs와 함께 기본 인수를 사용하면 보다 이식 가능한 솔루션이 제공됩니다.

답변4

사용 중인 명령 버전에 재귀 작업에 대한 플래그가 아직 없는지 확인하세요. :)

관련 정보