라는 디렉토리가 있습니다 outer
.
outer
inner
(동일한 확장자를 가진 많은 파일을 포함하는) 라는 디렉토리를 포함합니다 .
나는 cd
여기 있다 outer
. 그 안에 있는 모든 파일을 삭제 inner
하고 디렉토리는 그대로 유지하려면 어떻게 해야 합니까 inner
(비어 있음)?
답변1
디렉토리 자체가 아닌 디렉토리의 내용을 삭제하려면 rm
내용을 삭제하라고 지시하기만 하면 됩니다.
rm inner/*
이렇게 하면 숨겨진 파일이 아닌 모든 파일이 삭제되고 ./inner
디렉터리는 변경되지 않은 상태로 유지됩니다. 하위 디렉터리를 동시에 삭제하려면 다음을 사용하세요 -r
.
rm -r inner/*
숨겨진 파일도 제거하려면 다음을 수행하십시오(bash를 사용한다고 가정).
shopt -s dotglob
rm -r inner/*
마지막 명령은 의 모든 파일과 모든 디렉터리를 삭제 inner
하지만 inner
자체는 변경되지 않은 상태로 둡니다.
마지막으로 다음 중 하나를 cd
실행할 필요가 없습니다 .outer
$ tree -a outer/
outer/
├── dir
└── inner
├── dir
├── file
└── .hidden
3 directories, 2 files
이제 rm -r outer/inner/*
그것 없이도 현재 디렉토리에서 실행할 수 cd outer
있으며 디렉토리 자체를 제외한 모든 것이 삭제됩니다.
$ shopt -s dotglob
$ rm -r outer/inner/*
$ tree -a outer/
outer/
├── dir
└── inner
2 directories, 0 files
답변2
find inner -mindepth 1 -delete
답변3
특정 디렉터리 구조 아래의 모든 파일을 삭제하고 모든 디렉터리를 유지하려는 경우 가장 쉬운 방법은 find
의 -delete
스위치를 사용하는 것입니다.
find /path/to/outer -type f -delete
먼저 삭제하려는 항목을 확인하려면 -delete
마지막 항목을 생략하면 됩니다.
답변4
저는 이 루프를 많이 사용하므로 원하는 수의 폴더에 적용할 수 있고 걱정할 필요도 없습니다!
for i in `ls`; do rm -f $i/*; done