파일 목록을 제외한 모든 항목을 재귀적으로 삭제하는 방법은 무엇입니까?

파일 목록을 제외한 모든 항목을 재귀적으로 삭제하는 방법은 무엇입니까?

유지하려는 작은 파일 세트를 제외하고 디렉토리의 모든 것을 어떻게 반복적으로 삭제할 수 있습니까? 예를 들어 f2및 이름이 지정된 파일을 제외한 모든 파일을 삭제해 보겠습니다 f5.

# Create a testing ground
mkdir -p d{1..3}
touch d{1..3}/f{1..5}

# Remove all files EXCEPT ones named f2 and f5.
find . -type f -not -name ('f2'|'f5') -type f -exec rm -f '{}' +

# Remove empty directories
find . -type d -empty -delete

생산:

bash: syntax error near unexpected token `('

궁극적인 목표는 더 큰 C 사용자 공간 애플리케이션 내에서 이 작업을 수행하는 것이지만 system()명령줄 명령을 사용하는 것이 더 쉬워 보입니다.

답변1

find . -type f -not \( -name f2 -o -name f5 \) -delete

그것은 이루어져야합니다.

-delete동일 -exec rm -f '{}' +하지만 더 짧고 더 효율적입니다. 그러나 실제로 삭제하려는 파일만 가져오는지 확인하려면 먼저 이를 실행하지 않고 실행하세요.

관련 정보