확장자를 기반으로 파일 세트를 선택하는 구문은 무엇입니까?

확장자를 기반으로 파일 세트를 선택하는 구문은 무엇입니까?

다음 형식의 파일이 여러 개 있습니다.

그룹-1

file1.n001
file2.n002
file3.n003
file4.n004
:
:
:
filex.nx

그룹 - 2

file1.ntemp
file2.nreal
:
:etc

.n001 to .nx확장자가 있는 파일(예: 첫 번째 그룹의 파일)만 삭제하는 명령을 사용 하려면 번호가 매겨진 모든 확장자를 짧은 형식( 과 유사 ) rm으로 지정하는 방법이 있습니까 ? rm *.n001-x바꾸다 rm *.n001 *.n002 *.n003 ..... *.nx.

답변1

세 자리 숫자여야 하는 경우 x사용할 수 있습니다.

rm ./*.n[0-9][0-9][0-9]

이는 세 자리 접미사와 일치하며 표준 셸에서 작동해야 하며 테스트한 한 tcsh에서도 작동합니다.

zsh에서는 사용할 수 있습니다

rm ./*.n<1-999>

실제로 보면숫자, 단순한 문자 시퀀스가 ​​아닌 숫자 범위를 더 잘 제어할 수 있습니다. 그러나 선행 0을 무시하므로 예를 들어 와도 일치합니다 foo.n12.

물론, xtext 라면 별도로 명령줄에 추가 x해야 합니다 . ./*.nx또는 ./*.n[a-x]. 또는 ./*.n?. 아니면 당신이 필요로하는 무엇이든.

답변2

x가 0으로 채워진 3자리 숫자(file.n089, file.n678) 또는 알파벳(file.na, file.nb, file.nx, file.ny)을 나타내는지 여부입니다. 처음이라면 정말 쉽습니다. bash 4.1.2 이상을 사용한다고 가정합니다(언제 지원되었는지는 모르겠지만 4.1.2에서는 작동합니다).

rm ./file*.n{001..x} 

For i in {001..x}; do rm file'$i' 0으로 채워진 세 자리 숫자로 끝나는 모든 파일을 삭제합니다. x를 마지막 숫자로 바꾸세요. 그러나 file2.n003과도 일치합니다.
x가 알파벳을 나타내는 경우에도 이 작업을 수행하세요.

rm ./file*.n{a..x}

편집하다: 의 경우 tcshfile4.n003과 같은 이름과도 일치하지 않습니다.

foreach i ( `seq 1 x` ) 
rm file$i.n`printf "%0yd\n" $i`
end

x를 가장 높은 값으로 변경하고 y를 가장 높은 자릿수로 변경합니다. x번 이라고 해서 좀 느립니다 rm. 파일 이름을 문자열에 추가하고 문자열을 rm.tcsh 스크립트를 한 줄에 작성하는 방법도 모르겠습니다.

관련 정보