목표는 주어진 이름을 가진 디렉토리를 찾고 그 안의 모든 파일을 삭제하여 실제 디렉토리를 유지하는 것입니다
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.