디렉터리의 모든 파일을 삭제하되 디렉터리는 삭제하지 않음

디렉터리의 모든 파일을 삭제하되 디렉터리는 삭제하지 않음

라는 디렉토리가 있습니다 outer.

outerinner(동일한 확장자를 가진 많은 파일을 포함하는) 라는 디렉토리를 포함합니다 .

나는 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

관련 정보