지정된 파일 만 제외하고 폴더의 모든 파일을 어떻게 제거합니까? 만 남겨두고 디렉토리의 모든

지정된 파일 만 남겨두고 디렉토리의 모든 파일을 제거하고 싶습니다. 이름별로 공통점이 없습니다. 어떻게하면 될까요?

예를 들어, 유지하려는 파일 이름은 다음과 같습니다.

file_1.png, another_file.jpg,some_music.mp3



답변

bash를 사용하는 경우 :

shopt -s extglob
rm -- !(file1|file2|file3)

첫 번째 줄은 확장 패턴 일치를 활성화 한 후 그 중 하나를 사용합니다.

!(pattern-list) 주어진 패턴 중 하나를 제외한 모든 것과 일치

pattern-list는로 구분 된 하나 이상의 패턴 목록입니다 |.


또는 zsh

setopt extendedglob
rm -- ^(file1|file2)

또는 다음을 사용하여 휴대 성이 뛰어납니다 find.

find . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -v {} +

답변

서브 디렉토리 tmp를 작성하고 유지하려는 모든 파일을 해당 디렉토리 로 이동 한 rm -f *후 나중에 수행하십시오 . tmp디렉토리 에는 영향을 미치지 않습니다 .

그 후 그냥하십시오 :

mv tmp/* .
rmdir tmp

(이동 한 파일이 점으로 시작한다고 가정).

이것은 실제로 Ctrl유지하고 싶은 몇 개의 파일을 클릭 한 다음 메뉴를 사용 Edit -> Invert Selection하여 다른 파일을 가져온 다음 삭제할 수있는 노틸러스와 같은 파일 브라우저와 마우스를 사용하는 것이 합리적입니다 . .


답변

유지할 파일 이름을 한 줄에 하나씩 텍스트 파일에 추가하십시오. 이 파일은 디렉토리에 있거나 이름을 추가해야합니다.

디렉토리 이름이 foo 이고 파일 이름이 bar 인 경우 다음을 수행하십시오.

find foo -type f -print0|grep -vzZ -f bar|xargs -0 rm

이것은 다음을 수행합니다.

  1. find -type ffoo 및 해당 서브 디렉토리 의 모든 파일 이름을 검색 하여 STDOUT에 인쇄합니다. 옵션 -print0을 사용 하면 파일 이름을 NUL 바이트로 구분합니다.
  2. grep -v -f barbar 의 줄과 일치하는 모든 파일 이름을 제외합니다 . 옵션 -z을 사용하면 입력을 NUL 바이트로 구분 된 행 세트로 처리하고, 옵션 -Z을 사용하면 NUL 바이트로 출력을 제거합니다.
  3. xargs rmrm파일을 삭제하기 위해 반복해서 호출 합니다. 옵션 -0을 사용하면 입력을 NUL 바이트로 구분 된 행 세트로 처리합니다.

공백이 포함 된 파일 이름과 함께 작동합니다.