mv * 폴더("이동할 수 없음" 오류 방지)

mv * 폴더("이동할 수 없음" 오류 방지)

수천 개의 파일을 새 폴더로 이동하려고 할 때마다 항상 같은 문제에 직면합니다.

> mkdir my_folder
> mv * my_folder
mv: cannot move 'my_folder to a subdirectory of itself 'my_folder'

위의 오류는 무해하다고 생각하지만(응?) 피할 수 있는 방법이 있는지 궁금합니다.

중요한 경우 zsh의 솔루션이나 다양한 셸에서 잘 작동하는 솔루션에 관심이 있습니다.

답변1

zsh에서 extended_glob이 옵션을 활성화하면 glob에서 제외 패턴을 사용할 수 있으므로 ~다음을 사용할 수 있습니다.

setopt extended_glob
mv -- *~my_folder my_folder

또는 부정 연산자를 사용하십시오(여전히 사용됨 extended_glob).

mv -- ^my_folder my_folder

디렉터리 이름을 두 번 입력하지 않으려면 중괄호를 사용하세요.

mv -- {^,}my_folder

Bash(다른 답변을 찾는 사용자의 경우)에서는 Ksh 스타일 확장 글로브를 사용할 수 있습니다.

# If it's not already enabled
shopt -s extglob
mv -- !(my_folder) my_folder

zshksh_glob옵션이 활성화된 경우 이 구문을 사용할 수도 있습니다.

답변2

새 하위 디렉터리 외에 일반 파일만 있는 경우 find를 사용할 수 있습니다.

find . -type f -maxdepth 1 -exec mv {} my_folder \;

-type f옵션은 파일만 찾습니다(디렉토리는 아님). -maxdepth 1검색은 .(다른 디렉토리에서는 반복되지 않음)에서만 계속됩니다. 당신의 -exec …행동.

zsh에서는 이것을 다음과 같이 축약할 수 있습니다.

mv *(.) my_folder

예, 이 오류는 무해합니다.

답변3

당신은 그것을 사용할 수 있습니다 :

mv * my_folder 2>/dev/null

관련 정보