$ ls -l
total 0
-rw-rw-r-- 1 t t 0 Jun 8 16:37 'file; echo hello'
$ find . -exec echo {} \;
.
./file; echo hello
ls -l
아래 명령이 현재 디렉터리의 모든 파일을 대상으로 지정하지 않는 이유가 궁금합니다 . 왜 이름이 지정된 일부 파일을 보고합니까 1
? 감사해요.
$ find . -exec sh -c "ls -l $@" sh {} \;
ls: cannot access '1': No such file or directory
ls: cannot access '1': No such file or directory
$ find . -exec sh -c "echo ls -l $@" sh {} \;
ls -l 1
ls -l 1
답변1
두 경우 모두 큰따옴표로 묶인 문자열 안에 있기 때문에 $@
실행하기 전에 현재 셸에 의해 확장됩니다 . ( 위치 매개변수의 현재 값을 보려면 실행) 으로 설정한 find
것 같습니다 .$1
1
printf "%s\n" "$@"
의도한 대로 실험을 실행하려면 명령 주위에 작은따옴표를 사용하고 명령 주위에 큰따옴표를 사용해야 합니다 $@
(추가 분할을 방지하기 위해).
find . -exec sh -c 'ls -l "$@"' sh {} \;