명령줄을 사용하여 파일 이름에 숫자가 포함된 디렉터리를 어떻게 삭제할 수 있나요?

명령줄을 사용하여 파일 이름에 숫자가 포함된 디렉터리를 어떻게 삭제할 수 있나요?

그 안에 하위 디렉터리가 있는 디렉터리가 있는데, 하위 디렉터리에는 디렉터리 번호가 있습니다. 예를 들어, 상위 디렉터리가 있고 이제 , , , , , , test와 같은 하위 디렉터리가 있습니다 .1234567

이제 로컬 내보내기 변수가 있습니다. 예를 들어 . 보다 크거나 같고 같거나 같거나 같은 디렉터리를 export a=3삭제하고 싶기 때문에 , , 디렉터리를 삭제하고 싶습니다 .$a$a+2345

또한 최소 디렉터리 수를 모르고 $a디렉터리 수 이하의 모든 항목을 삭제하려는 경우 1디렉터리는 2삭제 3됩니다. 이 목표를 어떻게 달성할 수 있나요?

rm -rf {$a..$($a+3)}나는 성공 하지 못한 채 그것을 시도했고 rm -rf {<$a}, 성공하지 못한 채 다른 많은 것들을 시도했습니다.

답변1

bash 대신 zsh를 사용할 수 있습니다. 여기에는 십진 정수 범위와 일치하는 glob 연산자가 있으며 glob을 특정 유형의 파일로 제한할 수도 있습니다(예:목차귀하의 경우).

glob은 3, 4, 5를 포함하여 3부터 5 까지 <3-5>의 숫자로 구성된 문자열과 일치합니다 03. 003하지만 숫자는 문자 그대로여야 합니다. 다음을 수행하는 경우에도 변수를 사용할 수 있습니다.

range="<$a-$((a+2))>"
rm -rf test/$~range(/)

여기서 $~range강제 매개변수 확장은 패턴으로 처리되고 (/)파일 유형으로 제한됩니다 .목차.

익명 함수를 사용하는 경우 중간 변수 없이 수행할 수 있습니다.

() { rm -rf test/$~1(/); } "<$a-$((a+2))>"

4보다 작은 숫자를 일치시키려면 <0-3>또는 를 사용하세요 <-3>. 음수도 포함됩니다: (-<->|<0-3>).

해당 이름의 파일이 존재하는지 여부에 관계없이 (03, 00005...에 일치하는 항목이 없음) 로 확장되지만 귀하의 {$a..$((a+2))}방법은 zsh에서 작동합니다. 작동하지 않는다는 사실은 bash 쉘에만 영향을 미치는 제한 사항입니다(이를 지원하는 쉘에서는 실제로 zsh 발명품입니다).345{x..y}

답변2

숫자로 명명된 디렉토리만 있다고 가정하면 다음을 사용할 수 있습니다.

rm -rf $(seq $(ls | head -1) $a)

관련 정보