디렉터리의 파일과 폴더(폴더 내용 제외)를 삭제하는 가장 좋은 방법은 무엇입니까? [복사]

디렉터리의 파일과 폴더(폴더 내용 제외)를 삭제하는 가장 좋은 방법은 무엇입니까? [복사]

정기적으로 수행하는 일부 파일 관리 작업을 자동화하려고 합니다. "./xfer" 폴더와 해당 내용을 제외하고 디렉터리의 모든 파일과 폴더를 삭제하고 싶습니다.

나는 이것을 달성하기 위해 find 명령을 사용하려고 시도했지만 결과는 약간 투박합니다. 더 좋은 방법이 있나요? 다음 명령을 실행하여 테스트 환경을 설정했습니다.

mkdir test0{1..5}; find . -type d -exec touch '{}'/test-0{1..5} \;

이것이 제가 작업해온 명령입니다. 그런데, 저는 이것에 대해 조금 처음이고 주로 학습 연습으로 이것을 하고 있습니다. 또한 이것은 곧 마무리할 작은 스크립트의 마지막 명령이 될 것입니다.

find /some/directory/path/* -type f ! -path "/some/directory/path/xfer/*" -exec rm -fv {} \;; find /some/directory/path/*  -type d ! -path "/some/directory/path/xfer" -exec rm -rfv {} \;

답변1

당신은 그것을 사용할 수 있습니다 -prune:

find . -path ./xfer -prune -o -exec rm -fv {} \;

파일을 나열할 때 경로가 일치하면 ./xfer파일이 삭제되고 그렇지 않으면 rm호출됩니다.

답변2

find ./* -prune ! -path './xfer' -exec rm -fr {} +

더 정확합니다(그러나 GNU):

find . -mindepth 1 -maxdepth 1 ! -name 'xfer' -exec rm -fr {} +

또는

find . ! -path './xfer' ! -path '.xfer/*' -delete

답변3

for 루프는 어떻습니까? for i in $(ls|grep -v xfer);do rm -r $i;done

답변4

당신이 원하는 것이 아닐 수도 있지만, 나는 대개 그런 일을 합니다. 간직하고 싶은 것들을 제거합니다.

mv dir/keepme tmp/keepme
rm -rf dir/*
mv tmp/keepme dir/keepme

mv복사/삭제를 방지하려면 동일한 파일 시스템에 보관해야 합니다 .

관련 정보