내가 이해한 바로는 일치하는 각 파일에 대해 지정된 테스트가 find -tests -execdir <command> '{}' ';'
실행됩니다. command
이 명령을 사용하면 -execdir
일치하는 파일과 동일한 상위 디렉터리에서(일치하는 각 파일에 대해) 실행되며 {}
일치하는 파일의 기본 이름을 나타냅니다.
+
이제 질문은 여러 파일을 동시에 처리하는 대신 을 사용하는 경우 어떻게 달성됩니까 ';'
? 를 사용하면 find -tests -execdir <command> '{}' +
모든 파일이 지정된 명령에 대한 인수로 제공됩니다(최대 인수를 초과하지 않는 방식으로). 어떻게 <command>
동시에 모든 항목에 대해 find를 실행할 수 있나요?
답변1
find
다음 파일을 찾았다 고 가정해 보겠습니다 .
./foo/bar
./foo/baz
./foo/quux
을 사용하는 경우 -execdir [...]+
유효한 결과 명령은 다음과 같습니다.
( cd ./foo; command bar baz quux )
다음을 사용하면 그 반대가 (효과적으로) 됩니다 -execdir [...] \;
.
( cd ./foo; command bar )
( cd ./foo; command baz )
( cd ./foo; command quux )
-exec
not 도 마찬가지 execdir
지만 작업 디렉터리를 변경하는 대신 경로를 지정합니다. 을 사용하는 경우 -exec [...]+
유효한 결과 명령은 다음과 같습니다.
command ./foo/bar ./foo/baz ./foo/quux
다음을 사용하면 그 반대가 (효과적으로) 됩니다 -exec [...] \;
.
command ./foo/bar
command ./foo/baz
command ./foo/quux
두 디렉터리에 있는 파일이 어떻게 작동하는지 살펴보겠습니다.
$ tree
.
├── bar
│ ├── bletch
│ └── freeble
└── foo
├── bar
├── baz
└── quux
$ find . -type f -exec echo {} \;
./foo/baz
./foo/quux
./foo/bar
./bar/bletch
./bar/freeble
$ find . -type f -execdir echo {} \;
./baz
./quux
./bar
./bletch
./freeble
$ find . -type f -exec echo {} +
./foo/baz ./foo/quux ./foo/bar ./bar/bletch ./bar/freeble
$ find . -type f -execdir echo {} +
./baz ./quux ./bar
./bletch ./freeble