
오래된 파일을 삭제하려고 하는데 최신 3일 로그 파일을 보관해야 합니다. 아래 명령을 시도했습니다.
ls -tr /home/httpd/htdocs/경로 이름/경로 이름/config//빌드/로그/앱/.로그 | 꼬리 -n +4 | xargs rm --
하지만 모든 파일이 삭제되어 한 폴더에 3개의 파일만 유지됩니다. 하지만 각 폴더마다 3개의 파일을 별도로 유지하고 싶습니다.
누구든지 이 문제를 해결하도록 도와줄 수 있나요?
답변1
이것을 시도해보고 다음 내용을 쉘 스크립트 파일에 넣고 실행해 보세요.
#!/bin/bash
dirs=($(find /tmp/test -type d))
for dir in "${dirs[@]}"; do
cd "$dir"
ls -pt | grep -v / | tail -n +4 | xargs rm -f
done
/tmp/test
디렉터리 이름으로 바꾸세요 .
답변2
다음 명령을 사용할 수 있습니다.
ls -t path | sed -e '1,3d' | xargs -d '\n' rm
또는 루프에서:
for d in $(find path -type d); do
ls -t "$d" | sed -e '1,3d' | xargs -d '\n' rm
done
어디:
ls -t
: 수정 시간의 내림차순으로 파일을 나열합니다. 한 줄에 하나의 파일 이름이 표시됩니다.sed -e '1,3d'
: 처음 3줄을 삭제합니다.xargs -d '\n' rm
: 각 입력 줄에 대해(종료 줄바꿈 없이) 이를 인수로 에 전달합니다rm
.-d '\n'
: 이는 효율성을 위해 필요합니다. xargs가 각 입력 행을 별도의 인수로 간주하면서도 한 번에 명령줄에 들어갈 수 있는 만큼의 인수를 전달하므로 각 인수에 대해 rm이 다시 호출되지 않습니다.
더 많은 가능성을 보려면 게시물을 참조하세요. Bash에서 가장 최근의 X 파일을 제외하고 모두 삭제.