디렉토리의 내용 만 제거하는 방법? 내부의 모든 폴더에서 모든

폴더에 있습니다 : /var/myfolder.

내부에는 다음과 같은 다른 폴더가 있습니다 /var/myfolder/A/ /var/myfolder/B/ `/var/myfolder/C/.

각각에는 임의의 이름을 가진 파일이 있습니다. 내부의 모든 폴더에서 모든 파일을 어떻게 제거 /var/myfolder합니까?

구조 (내의 모든 디렉토리, 예를 들어 A, B, C 등 /var/myfolder)는 그대로 유지되어야합니다.



답변

시험:

find /var/myfolder -type f -delete

이것은 / var / myfolder 아래의 모든 일반 파일을 가져 와서 디렉토리 만 남기고 삭제합니다.


답변

zsh에서는 . glob 한정자 를 사용하여 일반 파일 만 일치 시킵니다 .

rm -- **/*(.)

현재 디렉토리와 하위 디렉토리의 모든 (숨겨지지 않은) 일반 파일을 재귀 적으로 삭제합니다. Dglob 한정자를 추가하여 숨겨진 일반 파일 (및 숨겨진 디렉토리의 일반 파일)도 삭제하십시오.


답변

당신은 실행할 수 rm */*있는/var/myfolder


답변

find . -depth -exec rm {} + 2>/dev/null

rm 디렉토리를 제거하지는 않으므로 모든 디렉토리에서 실행하십시오.

디렉토리에 대한 심볼릭 링크를 유지하려면

find .  ! -type d -exec sh -c '
    for f do [ -d  "$f" ] ||
          set "$@" "$f";  shift
    done; rm  "$@"' sh  {} +

그리고 위의 버전에서 테스트해야 할 파일이 많은 경우 약간 최적화 된 방식으로 작동해야한다고 생각합니다 .

find . ! \( -type l -o -type d \)  \
-exec  rm {} + -o -exec  sh -c '
       for f do [ -d "$f" ] ||
       unlink "$f";done' sh {} +

답변

# This will delete all directory contents, including hidden files and
# subdirectories, without deleting the directory itself

# With GNU find:
find /path/to/directoryToEmpty -mindepth 1 -delete

# OpenBSD (and probably other BSDs)
find /path/to/directoryToEmpty -mindepth 1 -depth -exec rm -f {} \;

# To see what it deletes, in the order it will delete it:
find /path/to/directoryToEmpty -mindepth 1 -depth -print

답변

rm var/myfolder/*/*

하위 폴더 자체를 건드리지 않고 하위 폴더 내의 모든 항목을 삭제합니다.

첫 번째는 *의 하위 디렉토리입니다 myfolder자체 ( A, B, …). 두 번째 *의 파일입니다 A, B

이상의 폴더 안에있는 경우 A, B등을 먼저 실행은 :
rm /var/myfolder/*/*/*다음 실행 rm /var/myfolder/*/*.


답변

또한 해당 디렉토리 트리의 상단으로 cd 한 다음 다음을 실행해야합니다.

find . -type f -print0 | xargs -0 rm -rf

디렉토리 트리는 그대로두고 모든 파일을 삭제해야합니다. 공백이 포함 된 파일 또는 디렉토리 이름이없는 경우 -print0 및 -0 옵션을 생략 할 수 있습니다.

find 명령은 파일 (-type f)과 링크 (-type l)를 구별하므로 링크가 있으면 그대로 두어야합니다. 그래도 테스트되지 않았습니다. 의심스러운 경우 다음을 실행하십시오.

찾기 . -l 형

이전 find 명령을 실행하기 전에 어떤 것이 나타나는지 확인하십시오.