여러 하위 폴더가 포함된 폴더가 있습니다. 이러한 모든 하위 폴더에 대한 로그 폴더가 있습니다. 상위 디렉터리의 단일 명령을 사용하여 이러한 하위 디렉터리의 모든 로그 폴더에서 모든 로그 파일을 개별적으로 지우려면 어떻게 해야 합니까?
예를 들어,
Folder/
Sub1/
Log/
Log1.txt
Log2.txt
Sub2/
Log/
Log10.txt
Log11.txt
이러한 로그 파일을 개별적으로 지우는 방법은 무엇입니까? 하위 폴더 sub1 및 sub2에는 삭제하면 안 되는 다른 폴더와 일부 파일이 포함될 수 있습니다. 시스템은 레드햇 리눅스이다.
답변1
bash globbing을 사용하여 여러 폴더를 일치시킬 수 있습니다. 그것은 다음과 같습니다:
rm ./Folder/*/Log/*
또는 더 나은 방법은 다음과 같습니다.
rm ./Folder/Sub*/Log/*
Log
두 번째 항목은 으로 제거됩니다 . Sub
필요한 경우 명령에 -r
(재귀) 또는 -f
(강제)를 추가할 수 있습니다.rm
bash globbing에 대한 자세한 내용은 내 다른 답변을 확인하세요.가변 디렉터리 이름으로 경로를 지정할 수 있나요?
logrotate
이것이 귀하의 질문에 직접적으로 대답하는 동안 다음을 사용하여 이전 로그 파일을 관리하는 것을 고려할 수 있습니다 .http://www.linuxcommand.org/man_pages/logrotate8.html
답변2
찾기 명령은 매우 강력하며 자금이 지원되는 개체에 대한 작업을 수행할 수 있습니다.
find . -type f -name "*.txt" -exec rm -f {} \;
보시다시피 이 명령은 *.txt 파일을 찾아 해당 파일에 대해 rm을 실행합니다.
로그 폴더의 파일만 삭제하려면:
find . -type d -name "Log" -exec sh -c 'find "$(realpath $1)" -type f -delete' _ {} \;
이 명령은 모든 로그 폴더를 찾은 다음 파일을 검색합니다.
답변3
이 경우에는 유형 매개변수와 함께 find를 사용할 수 있는 것 같습니다.
find {piyush,jain} -type f
piyush/jain/logs/1.log
piyush/jain/logs/2.log
piyush/jain/logs/3.log
jain/piyush/logs/4.log
jain/piyush/logs/5.log
jain/piyush/logs/6.log
find {piyush,jain} -type f | xargs rm -f
find {piyush,jain} -type f
답변4
루트 디렉터리에서도 이 작업을 수행할 수 있습니다. maxdepth
3개의 디렉터리를 찾는다는 -type f
것은 디렉터리가 포함되지 않은 파일만 찾은 다음 삭제한다는 의미입니다.
$ find . -maxdepth 3 -type f -name "*.txt" -exec rm -f {} \;