![디렉터리의 파일과 폴더(폴더 내용 제외)를 삭제하는 가장 좋은 방법은 무엇입니까? [복사]](https://linux55.com/image/66211/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EA%B3%BC%20%ED%8F%B4%EB%8D%94(%ED%8F%B4%EB%8D%94%20%EB%82%B4%EC%9A%A9%20%EC%A0%9C%EC%99%B8)%EB%A5%BC%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EA%B0%80%EC%9E%A5%20%EC%A2%8B%EC%9D%80%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
정기적으로 수행하는 일부 파일 관리 작업을 자동화하려고 합니다. "./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
복사/삭제를 방지하려면 동일한 파일 시스템에 보관해야 합니다 .