이름에 공통점이 없는 지정된 일부 파일만 유지하면서 디렉터리의 모든 파일을 삭제하고 싶습니다. 어떻게 해야 하나요?
예를 들어, 유지하려는 파일 이름은 다음과 같습니다.
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
이는 다음을 수행합니다.
find -type f
모든 파일 이름 검색부자및 해당 하위 디렉터리를 STDOUT으로 인쇄합니다.-print0
파일 이름을 NUL 바이트로 구분하는 옵션을 사용하십시오 .grep -v -f bar
다음 줄과 일치하는 모든 파일 이름을 제외합니다.술집. options 를 사용하면-z
입력을 NUL 바이트로 구분된 행 집합으로 처리하고, options 를 사용하면-Z
출력을 NUL 바이트로 처리합니다.xargs rm
파일을 삭제하기 위해 반복적으로 호출됩니다rm
. 옵션을 사용하면-0
입력을 NUL 바이트로 구분된 행 집합으로 처리합니다.
이는 공백이 포함된 파일 이름에 적용됩니다.