Linux Find를 사용하여 폴더의 파일 삭제

Linux Find를 사용하여 폴더의 파일 삭제

목표는 주어진 이름을 가진 디렉토리를 찾고 그 안의 모든 파일을 삭제하여 실제 디렉토리를 유지하는 것입니다

find /home/www/sites/ -iname '_cache' -exec du -hs {} \;

이것은 크기가 있는 파일 목록을 제공합니다

204K    /home/www/sites/test.site.com/html/development/Temporary/_cache
904K    /home/www/sites/test.site2.com/html/development/Temporary/_cache

Linux find 명령으로 달성할 수 있습니까?

답변1

뭔가를 시도했는데 작동하는 것 같습니다. Alex가 여기에 게시한 것과 비슷한 솔루션입니다.

find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -exec rm {} \;

_cache 디렉토리와 이 디렉토리에 있는 파일만 삭제해야 합니다. _cache 디렉터리의 하위 디렉터리에서는 파일이 삭제되지 않습니다.

물론 사용하기 전에 시도해 보고 rm 대신 ls나 무해한 것을 넣으세요.

답변2

이 논리를 철저하게 테스트하지는 않았지만 루프 내에서 다음과 같은 작업을 수행할 수 있습니다.

for findname in $(find /path/to/search -name '_pattern')
do
  find $findname -type f
done

따라서 검색 패턴과 일치하는 파일 목록을 얻은 다음 삭제할 파일을 찾기 위해 새로운 검색을 통해 각 파일을 반복합니다.

작성된 방식은 파일 목록을 제공하므로 이를 파일로 리디렉션한 다음 rm을 사용하여 반복할 수 있습니다. for 루프를 사용하여 찾기에 exec를 추가할 수도 있습니다. 논리를 테스트하고 일치 항목이 좋아 보이는지 확인하기 위해 먼저 작성된 대로 실행하는 것이 좋습니다.

답변3

지우려면 올바른 명령을 내리세요

find . -iname '_cache' | xargs -I {} find {} -type f -maxdepth 1 -delete 

답변4

find에는 -delete 옵션이 있습니다. 일치하는 항목이 모두 삭제됩니다.

매뉴얼 페이지에서

-삭제

          Delete files; true if removal succeeded.  If the removal failed,
          an  error message is issued.  If -delete fails, find's exit stat-
          us will be nonzero (when it eventually exits).  Use of  -delete
          automatically turns on the -depth option.

          Warnings:  Don't  forget that the find command line is evaluated
          as an expression, so putting -delete first will make find try to
          delete everything below the starting points you specified.  When
          testing a find command line that you later intend  to  use  with
          -delete,  you should explicitly specify -depth in order to avoid
          later surprises.  Because -delete  implies  -depth,  you  cannot
          usefully use -prune and -delete together.

관련 정보