각 개행 구분 기호에 대해 명령 실행

각 개행 구분 기호에 대해 명령 실행

나는 이것을 가지고있다:

 chmod u+x $(find scripts -name "*.sh")

그러나 결과는 줄 바꿈으로 구분되므로 찾기 목록의 첫 번째 항목에서만 chmod u+x를 실행한다고 생각합니다.

find 호출에서 반환된 각 항목에 대해 chmod u+x를 어떻게 실행합니까?

내 생각에는 xargs가 가장 좋은 방법일까요? 이 같은:

 find scripts -name "*.sh" | xargs chmod u+x

답변1

가장 안전한 방법은 직접 find실행 chmod하고 파일을 선택할 때 더욱 주의하는 것입니다.

find scripts -type f -name '*.sh' -exec chmod u+x {} +

scripts그러면 이름이 로 끝나는 디렉토리 안이나 아래의 모든 일반 파일을 찾고 동시에 가능한 한 많은 파일에서 실행 .sh됩니다 . chmod u+x잠재적으로 이상한 파일 이름을 문제 없이 처리합니다.

권한이 필요한 파일에 대해서만 권한을 변경하려면:

find scripts -type f -name '*.sh' ! -perm -u+x -exec chmod u+x {} +

관련 정보