그 안에 하위 디렉터리가 있는 디렉터리가 있는데, 하위 디렉터리에는 디렉터리 번호가 있습니다. 예를 들어, 상위 디렉터리가 있고 이제 , , , , , , test
와 같은 하위 디렉터리가 있습니다 .1
2
3
4
5
6
7
이제 로컬 내보내기 변수가 있습니다. 예를 들어 . 보다 크거나 같고 같거나 같거나 같은 디렉터리를 export a=3
삭제하고 싶기 때문에 , , 디렉터리를 삭제하고 싶습니다 .$a
$a+2
3
4
5
또한 최소 디렉터리 수를 모르고 $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 발명품입니다).3
4
5
{x..y}
답변2
숫자로 명명된 디렉토리만 있다고 가정하면 다음을 사용할 수 있습니다.
rm -rf $(seq $(ls | head -1) $a)