가장 오래된 파일을 삭제하지만 하위 디렉터리를 포함한 최신 파일을 유지하는 Bash 스크립트

가장 오래된 파일을 삭제하지만 하위 디렉터리를 포함한 최신 파일을 유지하는 Bash 스크립트

오래된 파일을 삭제하려고 하는데 최신 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 파일을 제외하고 모두 삭제.

관련 정보