다음으로 시작하지만 다음을 포함하지 않는 파일 삭제

다음으로 시작하지만 다음을 포함하지 않는 파일 삭제

한 번에 많은 파일을 삭제하려고 하는데 실제로 필요한 파일은 삭제하지 않도록 구체적으로 설명해야 합니다.

손상된 파일이 많아요주인-하지만 다음으로 시작하는 유효한 파일이 있습니다.마스터-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그 뒤에 조건자를 추가해야 합니다. 즉, 삭제는 불가능합니다.findmaster-1991subdir/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/* .

관련 정보