한 번에 많은 파일을 삭제하려고 하는데 실제로 필요한 파일은 삭제하지 않도록 구체적으로 설명해야 합니다.
손상된 파일이 많아요주인-하지만 다음으로 시작하는 유효한 파일이 있습니다.마스터-2018
그래서 나는 다음과 같은 것을하고 싶습니다
rm -rf master-* --exclude master-2018*
나에게 필요한 것이 가능한가?
답변1
예, 여러 모드를 사용할 수 있습니다 find
.
$ find -name 'master-*' \! -name 'master-2018*' -print0 -prune |
xargs -0 echo rm -fr
( echo
시운전에 만족하시면 삭제하세요)
현재 디렉토리에서만 파일을 삭제하려면 -maxdepth 1
그 뒤에 조건자를 추가해야 합니다. 즉, 삭제는 불가능합니다.find
master-1991
subdir/master-1991
답변2
배쉬에서:
shopt -s extglob
echo rm master-!(2018*)
echo
올바른 것 같으면 삭제하세요.
위의 내용은 bash의 확장된 글로빙 도구를 사용하여 시작 master-
하지만 2018
바로 뒤에 아무것도 나오지 않는 파일을 일치시킵니다( *
).
답변3
삭제하려는 모든 파일에 master-YYYY*와 같은 패턴이 있는 경우 다음 패턴을 사용할 수 있습니다.
rm -rf master-???[0-79]*
rm -rf master-??[02-9]*
rm -rf master-?[1-9]*
rm -rf master-[013-9]*
목표는 연도에서 숫자를 생략하는 것이므로 마스터 다음의 첫 번째 위치에서 숫자 2를 생략(제거하지 않음)하고, 두 번째 위치에서 숫자 0, 세 번째 위치에서 숫자 1을 생략해야 합니다. 네 번째 위치 - 8번 제가 조금 전에 시도했는데 처음 두 개만 실행해도 충분했습니다.
두 번째 방법: master-2018을 /tmp와 같은 다른 디렉터리로 이동한 다음 master-*를 사용하여 모든 항목을 삭제한 다음 tmp에서 master-2018로 다시 이동할 수 있습니다.
mkdir /tmp/backup
mv -r master-2018* /tmp/backup
rm -rf master-*
mv -r /tmp/backup/* .