특정 범위에서 번호가 매겨진 파일을 어떻게 삭제합니까?

특정 범위에서 번호가 매겨진 파일을 어떻게 삭제합니까?

folderA로 시작하는 숫자 시퀀스가 ​​있는 일부 파일이 있습니다 a_000000. 내가 하고 싶은 것은 특정 번호부터 시작하는 파일을 삭제하는 것입니다. a_000750folderA. 누구든지 쉘 스크립트를 사용하여 이 작업을 수행하는 방법을 조언해 주시겠습니까?

답변1

범위의 끝을 알고 있거나 추측할 수 있다고 가정하면 다음을 사용할 수 있습니다.버팀대 확장:

rm a_{000750..000850}

위의 명령은 a_000750에서 a_000850 사이의 101개 파일을 삭제합니다(그리고 존재하지 않는 파일을 참조하는 파일 이름에 대해 불평합니다). 파일이 너무 많으면 다음을 사용하세요 find.

find . -name 'a_*' | while read -r file; do 
  [ "${file#./a_}" -gt 000749 ] && rm -v "$file" 
done

여기서는 find단순히 일치하는 모든 파일을 나열합니다 a_*. 목록은 while각 파일 이름을 변수로 읽어들이는 루프 로 전달됩니다 $file. 그런 다음 bash를 사용하여문자열 조작기능에서 숫자 부분(find는 파일을 로 인쇄하므로 ./file숫자 ${file#./a_}만 인쇄함) 000750이상이면 파일이 삭제됩니다. 이 -v바로 거기에 있으므로 어떤 파일이 제거되었는지 확인할 수 있습니다.

위의 내용은 정상적인 파일 이름을 가정합니다. 이름에 공백, 줄 바꿈 또는 기타 이상한 문자가 포함될 수 있는 경우 대신 다음을 사용하십시오.

find . -name 'a_*' -print0 | while IFS= read -rd '' file; do 
  [ "${file#./a_}" -gt 000749 ] && rm -v "$file" 
done

답변2

다음과 같이 할 수 있습니다.

find . -regextype posix-extended -iregex './a_[0-9]{6}' -execdir bash -c '[[ ${1##./a_} > 000750 ]] && echo $1' "removing: " {} \;

또는:

find . -regextype posix-extended -iregex './a_[0-9]{6}' | sort | sed '0,/000750/d' | xargs echo

첫 번째 방법은 고정된 접두사를 가정하고 이를 제거한 후 값을 확인합니다.

두 번째 방법은 고정 길이 접미사(및 공통 고정 접두사)를 가정하고 해당 사실에 의존합니다. 그리고 그것은 사전순으로 201앞에 오는 반면 31, 앞에는 오지 않습니다 031.

명령 을 사용하여 이를 테스트 echo하고 올바른 파일이 나열되어 있다고 확신하면 rm대신 사용하십시오.

답변3

Bash에서는 다음을 실행할 수 있습니다.

for i in {1001..3000} ; do rm file_"$i".dat ; done

답변4

다음과 같이 간단하게

rm partialfilename* -f

귀하의 예에서는

rm a_00075* -f

관련 정보