디렉토리를 삭제하지 않고 모든 파일을 재귀 적으로 제거


10

하위 디렉토리에있는 모든 파일을 포함하여 디렉토리의 모든 파일을 "정리"하고 싶지만 하위 디렉토리를 그대로두고 싶습니다. 내 이해 rm -r는 하위 디렉토리 자체도 삭제한다는 것입니다.

나는 하지 않는 숨겨진 (점) 파일을 삭제합니다.

이것을 어떻게 할 수 있습니까?


1
find -type f ! -name "[.]*" -delete적합하지 않습니까?
Costas

모르겠어요 그것이 내가 원하는 것을합니까?
Scott Wilton

-delete삭제 하지 않고 파일 이름 만 인쇄하면됩니다.
Costas

숨겨진 디렉토리에서 파일을 숨기고 싶습니까?
Stéphane Chazelas 2016 년

디렉토리에 대한 심볼릭 링크는 어떻습니까?
Stéphane Chazelas 2016 년

답변:


10

find그것을 위해 사용하십시오 :

find . ! -name '.*' ! -type d -exec rm -- {} +

1
모든 발견 구현이-delete
wurtel

3
@RomeoNinov OP 질문을 읽으십시오 :I do not want to delete hidden (dot) files.
jimmij

1
@Costas, 아니, 탈출을 요구하는 쉘은 없습니다 +(적어도 Bourne, csh 또는 rc 제품군에는 없음). 일부 이전 버전의 csh이스케이프 처리 가 필요 하다는 전설이 {}있지만 결코 그런 적이 없습니다.
Stéphane Chazelas

1
@ScottWilton 숨겨진 디렉토리는 포함되지만 숨겨진 디렉토리의 숨겨진 파일은 포함되지 않습니다. 숨겨진 디렉토리의 모든 파일을 거부 find . ! -name '.*' ! -type d ! -path '*/.*'하려면 작업을 수행해야합니다.
jimmij

1
@ jimmy, 더 많이 find . -name '.?*' -prune -o ! -type d -exec rm {} +내림차순을 피하는 것이 좋습니다. 주 --경로로 시작부터 여기에 필요하지 않습니다는 (비록 해가되지 않습니다) ./.
Stéphane Chazelas

0

다음과 같은 것을 시도하십시오 :

find <path> ! -name '.*' -type f -exec rm {} \;

어떤 이유로 속도를 높이는 대신 한 번에 하나씩 파일을 제거해야 .... -exec rm {} + 합니까?
Anthon

나는 일을 하나씩하는 것을 선호합니다. 대량 (병렬) 작업에는 시간이 이상하고 불쾌한 부작용이 있습니다 (I / O 하위 시스템에 큰 부하를
가하기 때문에

1
-exec rm {} +병렬이 아니며 rm여러 파일 이름으로 호출 합니다. 더 적은 rm호출을 수행하므로 자원 친화적입니다. 제거하기 위해 파일의 디렉토리 구성 요소가 심볼릭 링크로 변경 될 수있는 레이스 창을 확대한다는 점에서 약간 안전하지 않은 경우. 그러나 단지 -delete또는 -execdir rm {} \;완전히 해결할 것입니다.
Stéphane Chazelas

@ StéphaneChazelas는 이들 중 하나 (-delete 또는 -execdir)가 UNIX에 존재합니다. 그리고 나는 리눅스에서 언급 될 문제가 보이지 않습니다!
Romeo Ninov

@RomeoNinov, 그렇습니다. 나는 다른 의견에서 -exec표준 이라고 만 말했습니다 . -delete그리고 -execdir비록 BSD의에서 오는, GNU는 약 10 년 후를 추가했다. 어쨌든, 그것은 리눅스와 관련이 없으며 커널입니다.
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.