지정된 일부 파일을 제외하고 폴더의 모든 파일을 삭제하는 방법은 무엇입니까?

지정된 일부 파일을 제외하고 폴더의 모든 파일을 삭제하는 방법은 무엇입니까?

이름에 공통점이 없는 지정된 일부 파일만 유지하면서 디렉터리의 모든 파일을 삭제하고 싶습니다. 어떻게 해야 하나요?

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

file_1.png, another_file.jpg,some_music.mp3

답변1

배시를 사용하는 경우:

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

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

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

패턴 목록은 로 구분된 하나 이상의 패턴 목록입니다 |.


또는zsh

setopt extendedglob
rm -- ^(file1|file2)

또는 더 이식성이 높으면 다음을 사용하십시오 find.

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

답변2

하위 디렉터리를 만들고 tmp보관하려는 모든 파일을 해당 디렉터리로 옮긴 rm -f *다음 작업을 수행합니다. 이는 tmp디렉터리에 영향을 주지 않습니다 .

그런 다음 다음을 수행하십시오.

mv tmp/* .
rmdir tmp

(이동하는 파일 중 점으로 시작하는 파일이 없다고 가정합니다.)

이는 마우스와 Nautilus와 같은 파일 브라우저를 사용하는 것이 적합한 몇 안 되는 경우 중 하나입니다. 실제로 Ctrl유지하려는 파일 몇 개를 클릭한 다음 메뉴를 사용할 수 있습니다. Edit -> Invert Selection다른 파일을 가져온 다음 삭제할 수 있습니다.

답변3

한 줄에 하나씩 텍스트 파일에 보관하려는 파일 이름을 추가합니다. 파일은 디렉터리에 있어서는 안 되며, 이름도 추가해야 합니다.

디렉토리 이름이 다음과 같은 경우부자파일 이름은 다음과 같습니다.술집, 다음 작업을 수행하십시오.

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

이는 다음을 수행합니다.

  1. find -type f모든 파일 이름 검색부자및 해당 하위 디렉터리를 STDOUT으로 인쇄합니다. -print0파일 이름을 NUL 바이트로 구분하는 옵션을 사용하십시오 .
  2. grep -v -f bar다음 줄과 일치하는 모든 파일 이름을 제외합니다.술집. options 를 사용하면 -z입력을 NUL 바이트로 구분된 행 집합으로 처리하고, options 를 사용하면 -Z출력을 NUL 바이트로 처리합니다.
  3. xargs rm파일을 삭제하기 위해 반복적으로 호출됩니다 rm. 옵션을 사용하면 -0입력을 NUL 바이트로 구분된 행 집합으로 처리합니다.

이는 공백이 포함된 파일 이름에 적용됩니다.

관련 정보