명령 줄에서 파일 범위 복사 (ZSH / BASH)


13

연속 번호가 접미사로 포함 된 파일 목록이 있습니다. 이 파일들 중 일부만 복사하고 싶습니다. 내 cp 명령의 일부로 범위를 지정하는 방법

$ls
P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG*
P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG*

P1080275.JPG에서 P1080283.JPG로 파일을 복사하고 싶습니다.

$cp P10802[75-83].JPG ~/Images/.

이것을 할 수있는 방법이 있습니까?

답변:


25

당신은 매우 가까웠습니다. 귀하의 질문은 거의 올바른 구문이었습니다.

cp P10802{75..83}.JPG ~/Images

9

bash에서 범위를 반복하려면 :

for x in {0..10}; do echo $x; done

귀하의 경우에도 똑같이 적용하십시오 :

for x in {272..283}; do cp P1080$x.JPG ~/Images; done

이것은 작동하지만 프로그래밍 구성을 호출하지 않기 때문에 @glenn jackman의 대답이 더 좋습니다.
Amjith

4

extendedglob 옵션이있는 Zsh에는 globbing (패턴 일치) 연산자가 있습니다.

setopt extendedglob
echo P10802<75-83>.JPG

해당 패턴과 일치하는 현재 디렉토리의 파일 이름과 일치합니다 (P1080275.JPG는 일치하지만 P108020000000075.JPG는 일치 함)

다른 한편으로, {x ... y} 문자열 확장 연산자 (zsh 및 최신 버전의 bash 및 ksh93에서 지원)는 현재 디렉토리에있는 파일에 관계없이 x에서 y로 문자열로 확장됩니다.

cp P10802<75-83>.JPG ~there

일치하는 파일을 복사하므로

cp P10802{75..83}.JPG ~there

그러나 예를 들어 P1080281.JPG가 존재하지 않으면 오류가 발생합니다.


1

이것이 당신에게 효과가 있습니까?

for each in {75..83}; do cp P10802$each.JPG ~/Images/; done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.