*.{jpg,png}
이러한 유형의 모든 파일을 선택하면 안 되나요?
mv
이렇게 연속 타겟을 받는 것이 가능하다는 것을 알고 있는데 mv *.png *.jpg folder/
, 왜 {}
안 될까요?
답변1
당신은 찾고있을 수 있습니다
shopt -s nullglob
답변2
중괄호 확장은 파일 이름 와일드카드의 일부가 아니며 고유한 기능이며 와일드카드가 발생하기 전에 작동합니다.
먼저 중괄호 확장이 sum *.{jpg,png}
이 됩니다 . 그런 다음 파일 이름 글로빙을 통해 일치하는 파일 이름으로 확장합니다. 기본적으로 어떤 파일과도 일치하지 않는 glob 패턴은 그대로 유지됩니다. 따라서 이 두 가지는 동일합니다.*.jpg
*.png
mv *.png *.jpg folder/
mv *.{png,jpg} folder/
디렉토리에 있는 유일한 파일이 foo.png
및 이면 bar.png
두 명령 모두 다음으로 확장됩니다.
mv foo.png bar.png *.jpg folder/
mv
존재하지 않는 파일에 대해 불평할 수도 있습니다 *.jpg
.
Bash를 사용한다고 가정하면 을 사용하여 확장 glob을 활성화 shopt -s extglob
하고 확장 glob을 사용해야 합니다 *.(png|jpg)
. 원하는 대로 작동하지만 실제로는 두 개가 아닌 하나의 얼룩을 만듭니다. 또는 shopt -s nullglob
일치하지 않는 글로브를 그대로 두는 대신 사라지게 하는 이것을 설정할 수 있습니다 .
두 유형 중 하나 이상의 파일이 존재하는 경우 결과는 동일합니다. 전혀 존재하지 않으면 비활성화된 *.(png|jpg)
것처럼 그대로 유지됩니다 . nullglob
켜져 있으면 nullglob
이러한 모드가 완전히 사라지고 명령이 바로 mv folder/
. 오류 메시지는 혼란스러울 수 있습니다.