최근에 특정 패턴과 일치하는 파일을 제외하고 디렉토리의 모든 파일 / 폴더를 삭제하는 작업에 직면했습니다. 그래서 작업을 수행하기 위해 한 줄짜리 유닉스 명령을 만들었습니다. 한 줄만되어야합니까? 나는 그렇지 않다고 생각하지만, 그런 식으로 확실히 더 시원합니다!
문제는 매우 간단하지만 솔루션이 얼마나 복잡한 지에 약간 놀랐습니다. 내가 사용한 명령은 다음과 같습니다. 참고 : 이것은 줄 바꿈 문자가 포함 된 파일 이름을 처리하지 않기 때문에 좋지 않은 솔루션입니다 (내 상황에서는 중요하지 않음).
ls | grep -v PATTERN | xargs -n1 -IREPLACE rm -rf REPLACE
PATTERN과 일치하는 폴더로 재귀를 원하지 않기 때문에 "find"명령을 사용하지 않았습니다. 예를 들어, 다음 파일 구조를 고려하십시오.
file_foo.txt
first_dir
|
+--> contents
+--> ...
foo_dir
|
+--> anotherfile.txt
+--> morefiles.log
foo_file.txt
somefile.txt
패턴 "foo는"을 사용하면 전용 "first_dir"(물론 그것의 내용)와 "somefile.txt"(제거해야 하지 "anotherfile.txt"또는 "morefiles.log을").
질문, 이것을 달성하는 더 나은 (더 우아하고 올바른) 방법이 있습니까?
편집 :
최근에 "찾기"가 더 나은 옵션 일 수 있다는 것이 주목되었습니다 .
find * -maxdepth 0 ! -name PATTERN -print0 | xargs -0n1 rm -rf
이 솔루션은 줄 바꿈 문자가 포함 된 경로를 올바르게 처리합니다.