Mac OS X에서 폴더의 모든 파일을 하위 폴더가 있는 zsh로 이동하는 방법은 무엇입니까?

Mac OS X에서 폴더의 모든 파일을 하위 폴더가 있는 zsh로 이동하는 방법은 무엇입니까?

이 질문은 기본적으로 이 질문과 중복됩니다.https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder

하지만 Mac OS X 터미널에서 oh-my-zsh를 사용하여 이 작업을 수행하는 방법을 묻고 있습니다.

제공된 솔루션에 대한 내 문제는 내 터미널에서 작동하지 않는 것 같다는 것입니다(질문에서 "new" 폴더를 "oldCodeBase"로 바꾸십시오).

[~/Sid/Moonshine_Machine, 127, master+3]: mv !(oldCodeBase) oldCodeBase
zsh: number expected

여기서 기다리고 있는 전화번호는 무엇입니까?

제안된 다른 솔루션으로 전환하는 것은 shopt 명령을 사용하는 것입니다.

하지만 사용할 수 있는 shopt 명령이 없는 것 같습니다.

~/Sid/Moonshine_Machine, 1, master+3]: shopt -s extglob dotglob
 zsh: command not found: shopt

따라서 현재 두 솔루션 모두 작동하지 않는 것 같습니다.

편집하다:

zsh의 "setopt"가 "shopt"와 비슷한 명령인 것 같지만 다음과 같은 문제를 일으키는 것으로 나타났습니다.

[~/Sid/Moonshine_Machine, 127, master+3]: setopt -s extglob dotglob
setopt: no such option: extglob

답변1

!(pattern)ksh glob 연산자입니다. shopt옵션 중 하나를 활성화하는 bash 쉘의 내장 명령입니다(활성화된 옵션은 사용되지 않음 set -o). bash옵션은 extglobksh의 확장된 glob 연산자의 하위 집합을 활성화합니다.

에서 zsh부정 연산자 ^ extendedglob는 다음과 같습니다.@mdmay74가 표시했습니다.zsh에는 하나의 옵션 세트만 있으며 모두 set -o/ set +o(역사적으로는 setopt/ unsetopt)로 전환됩니다. 따라서 다음을 사용합니다.

set -o extendedglob
mv -- ^oldCodeBase(D) oldCodeBase

노트:

  • --파일 이름이 다음으로 시작하는 경우 필수-
  • (D)숨겨진 파일도 이동해야 합니다( 에서는 bash를 사용할 수 있음 shopt -s dotglob).

kshglobzsh에는 ksh의 확장 glob을 활성화하는 옵션 도 있습니다 . 그러나 이는 zsh 자체 확장 glob 연산자보다 사용하기가 더 까다롭기 때문에 일반적으로 emulate kshksh용으로 작성된 스크립트를 해석하는 데 도움이 되는 ksh 에뮬레이션()의 일부로만 사용합니다 .

set -o kshglob
mv -- !(oldCodeBase)(D) oldCodeBase

( !(oldCodeBase)옵션을 비활성화하지 않으면 이 옵션만으로는 작동하지 않습니다 bareglobqual. 그렇지 않으면 (oldCodeBase)전역 한정자로 처리됩니다.)

보다 일반적으로, 한 언어에서 유효한 것이 다른 언어에서도 유효할 것이라고 가정할 수 없습니다.물건공통 표준이나 공통 유산에서 비롯됩니다. 둘 다 Bourne, Korn 및 Csh의 전통을 따르며 각각 POSIX 호환 모드를 가지며 서로의 일부 기능도 복사하지만 일반적으로 구문이 다릅니다 bash.zsh

답변2

내부에협회당신이 인용한 내용에 대해 허용되는 답변을 읽으십시오. 그 뒤의 댓글에서 한 사람이 zsh에 해당하는 것이 무엇인지 물었고 @MrT가 응답했습니다.

setopt extendedglobzsh에서 확장 글로벌 모드를 설정합니다. ^제외 기호이므로 mv ^new new그게 전부입니다. 그런 다음 zsh에서 설정할 수 있는 모든 옵션을 살펴보고 setopt확장 글로벌 모드를 비활성화하세요.unsetopt extendedglob

댓글로 달 수 있었는데 아직은 그러지 못했어요... :-)

관련 정보