유닉스에서 하나의 파일을 제외한 모든 파일을 삭제하는 방법은 무엇입니까? [복제]


답변:


20
ls * | grep -v dont_delete_this_file | xargs rm -rf 

예 :

mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5

'test2'를 제외한 모든 파일을 제거하려면 다음을 수행하십시오.

ls * | grep -v test2 | xargs rm -rf

그런 다음 'ls'출력은 다음과 같습니다.

test2

편집하다:

의견 주셔서 감사합니다. 디렉토리에 공백이있는 파일이 포함 된 경우 :

mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"

bash와 함께 사용할 수 있습니다.

rm !("test 1"|"test 4")

'ls'출력 :

test 1
test 4

find를 사용하여 매우 비슷한 작업을 수행 할 것이지만 귀하의 작업은 더 빨랐습니다. +1
Rory Alsop

2
이름에 공백이있는 파일이 있으면 실패합니다.
Mat

공백이있는 파일 이름을 처리하려면 다음을 사용하십시오.ls -1 | grep -v do_not_delete | xargs -I files rm "files"
sebhofer

8

bash 쉘 (가장 일반적인 경우)을 사용한다고 가정하면 부정 글 로빙 (경로 확장) 기호를 사용할 수 있습니다.

rm -rf !(myfile.txt)

이것은 확장 글러브를 사용하므로 먼저 이것을 활성화해야합니다.

shopt -s extglob




0

재귀의 rm경우 재귀를 수행하고 find유지하려는 파일을 제외해야합니다 (또는 grep이지만 공백 문제가 발생할 수 있습니다). 쉘 글로브의 경우, 현대 쉘에는 파일을 제외하는 데 사용할 수있는 글로브 패턴이 있습니다. 이것은 쉘 수준의 글로브 재귀와 결합 될 수있다 사용할 수 (예를 들어, zshrm **/*~foo/bar- 노트이 큰 디렉토리 트리에 대한 인수 길이 제한으로 실행 가능성이 있음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.