이 질문은 기본적으로 이 질문과 중복됩니다.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
옵션은 extglob
ksh의 확장된 glob 연산자의 하위 집합을 활성화합니다.
에서 zsh
부정 연산자 ^
extendedglob
는 다음과 같습니다.@mdmay74가 표시했습니다.zsh에는 하나의 옵션 세트만 있으며 모두 set -o
/ set +o
(역사적으로는 setopt
/ unsetopt
)로 전환됩니다. 따라서 다음을 사용합니다.
set -o extendedglob
mv -- ^oldCodeBase(D) oldCodeBase
노트:
--
파일 이름이 다음으로 시작하는 경우 필수-
(D)
숨겨진 파일도 이동해야 합니다( 에서는bash
를 사용할 수 있음shopt -s dotglob
).
kshglob
zsh에는 ksh의 확장 glob을 활성화하는 옵션 도 있습니다 . 그러나 이는 zsh 자체 확장 glob 연산자보다 사용하기가 더 까다롭기 때문에 일반적으로 emulate ksh
ksh용으로 작성된 스크립트를 해석하는 데 도움이 되는 ksh 에뮬레이션()의 일부로만 사용합니다 .
set -o kshglob
mv -- !(oldCodeBase)(D) oldCodeBase
( !(oldCodeBase)
옵션을 비활성화하지 않으면 이 옵션만으로는 작동하지 않습니다 bareglobqual
. 그렇지 않으면 (oldCodeBase)
전역 한정자로 처리됩니다.)
보다 일반적으로, 한 언어에서 유효한 것이 다른 언어에서도 유효할 것이라고 가정할 수 없습니다.물건공통 표준이나 공통 유산에서 비롯됩니다. 둘 다 Bourne, Korn 및 Csh의 전통을 따르며 각각 POSIX 호환 모드를 가지며 서로의 일부 기능도 복사하지만 일반적으로 구문이 다릅니다 bash
.zsh
답변2
내부에협회당신이 인용한 내용에 대해 허용되는 답변을 읽으십시오. 그 뒤의 댓글에서 한 사람이 zsh에 해당하는 것이 무엇인지 물었고 @MrT가 응답했습니다.
setopt extendedglob
zsh에서 확장 글로벌 모드를 설정합니다.^
제외 기호이므로mv ^new new
그게 전부입니다. 그런 다음 zsh에서 설정할 수 있는 모든 옵션을 살펴보고setopt
확장 글로벌 모드를 비활성화하세요.unsetopt extendedglob
댓글로 달 수 있었는데 아직은 그러지 못했어요... :-)