특정 하위 디렉터리를 유지하면서 특정 폴더에 있는 모든 하위 디렉터리와 해당 콘텐츠를 삭제해야 합니다. bash나 쉘 스크립트를 사용하여 이를 수행할 수 있는 방법이 있습니까? 파일 구조는 아래와 같습니다.
container_dir
│
├── delete_this_dir
│ ├── file1.txt
│ └── file2.txt
│
├── delete_this_dir
│ ├── l1.txt
│ └── l2.txt
│
└── keep_this_dir
├── file1.txt
├── file2.txt
└── file3.txt
답변1
배쉬에서는 다음을 사용하십시오.외부 전역 변수유지할 디렉터리 제외:
shopt -s extglob
rm -rf container_dir/!(keep_this_dir)
답변2
이 컨테이너_디렉터리를 백업하고 다음을 시도하십시오.
find $container_dir/* -path $keep_this_dir -prune -o -name "*" -type d -exec rm -rfv {} \;
하지만 더 간단한 백업 솔루션을 사용하는 것이 좋습니다.
답변3
이름만으로 유지할 디렉터리를 결정하는 경우 다음을 수행할 수 있습니다.
cd container_dir && \
find . -maxdepth 1 -type d ! -name . ! -name keep_this_dir -exec rm -r {} +
즉, 컨테이너 디렉터리로 전환하고 find
거기에서 시작하지만 깊이 수준 1까지만 가능하며 해당 수준의 디렉터리에서만 검색합니다. 얻은 디렉토리 풀에서는 find
두 개의 디렉토리, 즉 Container_dir 및 keep_this_dir만 유지됩니다. 나머지는 학살되기를 기다리고 있습니다.