모두 제거하는 스크립트, 그러나 모든 하위 디렉토리의 최신 백업 파일 하나를 유지


1

다음 스크립트는 단일 폴더에서 작동하지만 모든 하위 디렉토리를 반복하고 싶습니다.

ls /home/user/Desktop/cron_database_hourly/*/*_[012][0-9]*.zip | head -n -1 | \
   while read -r f; do rm "$f"; done

유효한 구문처럼 보이지 않습니다 ls -l. 처음에 또는 그와 비슷한 부분이 없습니까?
slhck

네, 죄송합니다, 질문을 업데이트했습니다
Ash

나는 ls가 ls -t 여야한다고 의심한다
davidgo

답변:


0

아마도 (예상치 않은) 것을 피할 수 있습니다.

for each in `find -type d /home/usr/Desktop/cron_database/hourly`
do
   ls -t $each/_[012][0-9]*.zip | head -n -1 | \ while read -r f; 
       do 
           rm "$f" 
      done
done

"for each"는 모든 디렉토리의 목록을 찾고, "-t"를 ls에 추가하면 가장 최근의 것부터 날짜 순서로 정렬됩니다.


내가 읽을 때 가장 오래된 것 이외의 모든 것을 제거합니다 . 필요 ls -rt없습니까? 아니면 사용 tail -n +2합니까?
AFH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.