범위:
export exc_lst='! -path "/var/app/s2/pnl/incoming/recondata/*.*"';
다음 find 명령을 사용하려고 하면:
find $FILE_DIR -name "*.*" "${exc_lst}" -type f -mtime +20 -user sh79790 -ls
오류가 발생합니다. 연결 누락
find $FILE_DIR -name "*.*" ${exc_lst} -type f -mtime +20 -user sh79790 -ls
언급된 경로는 제외되지 않습니다.
값을 직접 전달하면 제대로 작동합니다.
find $FILE_DIR -name "*.*" ! -path "/var/app/s2/pnl/incoming/recondata/*.*" -type f -mtime +20 -user sh79790 -ls
find 명령에서 제외할 모든 파일을 포함할 변수를 구문 분석해야 합니다.
답변1
인용 문제가 있습니다.
팁: 명령줄 앞에 붙여넣어 echo
실제로 확장되는 내용을 확인하세요. 보다 구체적으로 각 인수가 구분된 위치를 정확하게 표시하려면 python -c "import sys; print sys.argv[1:]"
명령줄 앞에 붙여넣습니다.
python -c "import sys; print sys.argv[1:]" \
find $FILE_DIR -name "*.*" "${exc_lst}" -type f -mtime +20 -user sh79790 -ls
산출:
['find', '-name', '*.*', '! -path "/var/app/s2/pnl/incoming/recondata/*.*"', '-type', 'f', '-mtime', '+20', '-user', 'sh79790', '-ls']
보시다시피 ! -path "/var/app/s2/pnl/incoming/recondata/*.*"
공백과 따옴표가 포함된 하나의 큰 매개변수로 제공됩니다. 인용할 때 요구하는 사항은 다음과 같습니다 ${exc_lst}"
. 확장하지 마세요. find
이것을 인식하지 마십시오. !
, -path
및 path 는 모두 별도의 매개변수로 사용됩니다 .
지금:
echo find $FILE_DIR -name "*.*" ${exc_lst} -type f -mtime +20 -user sh79790 -ls
산출:
find -name *.* ! -path "/var/app/s2/pnl/incoming/recondata/*.*" -type f -mtime +20 -user sh79790 -ls
보시다시피, 경로 이름 주위에는 문자 그대로 큰따옴표 문자가 있습니다. 실제로 이러한 따옴표가 포함된 경로는 제외되지만 이는 발생하지 않습니다.
exc_lst
다음 인용문 없이 정의 해 보세요 .
export exc_lst='! -path /var/app/s2/pnl/incoming/recondata/*.*'
그런 다음 두 번째 형식을 사용합니다.
find $FILE_DIR -name "*.*" ${exc_lst} -type f -mtime +20 -user sh79790 -ls
다행히 제외할 경로에는 공백이 포함되어 있지 않습니다. 그렇다면 이를 달성하기 어려울 것입니다.
참고: 내 모든 예제 출력에는 첫 번째 매개변수 가 내 셸 find
에 정의되어 있지 않기 때문에 $FILE_DIR
(해당 값을 지정하지 않았음) 누락되어 있지만 정의된 경우 해당 매개변수가 있을 것입니다.
답변2
exec_lst
수행 방법을 정의하는 동시에 쉘이 파일 이름을 확장하는 것을 방지할 수는 없습니다 .
-path
해당 매개변수는 별도의 매개변수에 있어야 합니다.
따라서 명령줄에서 직접 `-path*를 사용하고 경로를 쉘 변수에 넣는 것이 좋습니다.
또 다른 접근 방식은 $[exed_lst] 주위의 "를 생략하고 변수 할당의 각 별표 앞에 백슬래시를 1~2개 추가하는 것입니다.