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