zsh: (DN)은 무엇을 의미하나요?

zsh: (DN)은 무엇을 의미하나요?

나는 디렉터리의 내용(해당 디렉터리의 숨김 파일 및 폴더 포함)을 다른 디렉터리로 복사하거나 이동하기 위해 "신비한" 방법을 사용하는 사람들이 있다는 것을 보았습니다 (DN).

cp -R dir1/*(DN) dir2/
mv dir/*(DN) dir2/

man cp다시 언급 되지 않는 것 같습니다 man mv. 그것은 무엇입니까? 이에 대한 자세한 내용은 어디에서 확인할 수 있나요?

답변1

그들은 zsh입니다글로벌 예선

   N      sets the NULL_GLOB option for the current pattern

   D      sets the GLOB_DOTS option for the current pattern

무엇을 의미 하는가

  NULL_GLOB (-G)
          If  a pattern for filename generation has no matches, delete the
          pattern from the argument list instead of  reporting  an  error.
          Overrides NOMATCH.
   GLOB_DOTS (-4)
          Do not require a leading `.' in a filename to be matched explic‐
          itly.

man zshexpnzsh 확장 매뉴얼 페이지 및 zsh 옵션 매뉴얼 페이지에서 자세한 정보를 찾을 수 있습니다 man zshoptions.

귀하의 장소:

cp -R dir1/*(DN) dir2/

즉, 숨겨진 파일도 복사되지만 N한정자는 여기서는 의미가 없습니다. 일치하는 파일이 없는 경우( dir1비어 있거나 읽을 수 없는 경우) 명령은 다음과 같기 때문입니다.

cp -R dir2/

그리고 N진압 하면서불일치zsh 오류가 발생하면 여전히 (더 혼란스러운) 오류가 발생합니다.대상 파일 피연산자가 누락되었습니다.오류의 원인은 입니다 cp.

N(nullglob)은 null 확장이 가능한 경우 files=( *(N) )와 같은 상황에서 가장 유용합니다 .for file in *(N)...

하지만 걱정이 되시면 그냥 두시는 것이 좋습니다.

cp또는 일치하는 항목이 없을 때 오류를 보고하지 않고 실행 하지 않으려면 다음을 수행할 수 있습니다.

function { (( $# == 0 )) || cp -R -- "$@" dir2/; } dir1/*(ND)

결과 목록(비어 있음 허용)은 호출하기 전에 크기를 확인하는 익명 함수에 전달됩니다 cp.

관련 정보