7 일이 지난 파일 자동 삭제


17

나는 리눅스에서 완전한 멍청한 놈이지만 그것을 멈추기 시작했다. 보안 비디오 파일을 백업하기 위해 FTP 서버를 실행하는 Ubuntu Server 16.04가 있습니다. 파일은 같은 폴더에 저장됩니다 /home/securityfolder1, /home/securityfolder2, /home/securityfolder3등등.

각각 securityfolderN다른 사용자입니다.

하드 드라이브를 항상 가득 채우고 싶지 않기 때문에 매일이 폴더에서 7 일이 지난 파일을 삭제하고 싶습니다.


/home일반적으로 각 사용자의 하위 폴더가 포함됩니다. 백업을 다른 사용자 (실제로 좋은 아이디어는 아님)로 저장하지 않으려면 다른 위치 (예 : /home/security/backup1등)를 고려해야 합니다.
— Melebius

@ Melevius 귀하의 의견에 감사드립니다, 모든 / securityfolder는 다른 사용자입니다, 나는 그것을 언급하는 것을 잊었습니다.
— Jacco van de Wijgaart

답변:


27

먼저이 명령은 /home이름이 다음으로 시작 하는 하위 디렉토리에서 7 일이 지난 모든 파일을 찾아 삭제합니다 securityuser.

find /home/securityuser* -mtime +6 -type f -delete

24 시간을 계산 하기 때문에 필요 -mtime +6하지는 않습니다 . ( 같은 방식으로 작동) 섹션에 설명 된대로 :+7-mtime-atimeman find-mtime

   -atime n
          File  was  last  accessed n*24 hours ago.  When find figures out
          how many 24-hour periods ago the file  was  last  accessed,  any
          fractional part is ignored, so to match -atime +1, a file has to
          have been accessed at least two days ago.

따라서 7 일 이상 전에 수정 된 파일을 찾으려면 6 일 이상 전에 수정 된 파일을 찾아야합니다 -mtime +6.

다음 단계는이 명령을 하루에 한 번 실행하는 것입니다. 각 securityuserN사용자는 서로 다른 사용자 이므로 해당 설정을 다시 생각하면 모든 것이 더 복잡해집니다. 루트로 실행해야합니다. 따라서 편집하십시오 /etc/crontab.

sudo nano /etc/crontab

그리고이 줄을 추가하십시오 :

@daily root find /home/securityuser* -mtime +6 -type f -delete

find하루에 한 번 명령 을 실행 하고 파일을 삭제합니다.


+1 네일을 조금 더 깊이 몰고 어쩌면 멜리 비우스의 OP에 대한 제안을 되풀이 find '/home/securityuser/*' -mtime +6 -type f -delete할 수 있습니다 find '/home/securityuser*' -mtime +6 -type f -delete.
— Cbhihe

@Cbhihe 아니오, 대상 디렉토리는 /home/securityuserN이므로 슬래시가 없으면 찾을 수 없습니다.
— terdon

p. OP가 그렇게해야 할 이유가있을 수 있지만 Melebius의 첫 번째 의견에 따라 OP 부분 (각 보안 비디오에 대해 별도의 사용자 만들기 등)에 대해서는 좋은 관행이 아니라고 생각했습니다. 내 의견이 절름발이 났지만, 선하고 완전한 대답에 대한 비판이 아닙니다.
— Cbhihe

1
+1 나에게서. RHEL에서 이것을 실행할 때 한 가지 세부 사항을 참고하십시오. 와일드 카드는 경로에서 작동하지 않았습니다. 나는 그것을 위에 올려 놓아야했다 -name:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
— Stelios Adamantidis

1
@SteliosAdamantidis 오 와우, 나는 그것을 완전히 놓쳤다! 예, 인용 한 이후 원본 버전이 작동하지 않습니다 'securityuser*'. 와일드 카드는하지 않음으로써, 쉘에 의해 확장되어야한다 find는 없었다해야하므로, securityuser*(따옴표). 업데이트 된 답변을 참조하십시오. 지적 해 주셔서 감사합니다. Stelio, 아무도 눈치 채지 못했습니다! 티 블라 카스!
— terdon

4

내가 알기로는 :

다음 find과 같은 명령을 시도 하십시오.

find ./dirc/* -mtime +6 -type f -delete

./dirc/* : is your directory (Path)
-mtime +6 : modified more than 6 days ago (therefore, at least 7 days ago)
-type f : only files
-delete : no surprise. Remove it to test before like rm

답변 주셔서 감사합니다. ./dirc/*는 ./home/securityfolder1/*을 의미합니까?
— Jacco van de Wijgaart

방금 가상 상자에서 시도했지만 find /home/jacco/ -mtime +1 -type f -delete작동하는 것 같습니다. 이것을 자동화하려면 어떻게해야합니까?
— Jacco van de Wijgaart

시작 프로세스에서 스크립트 파일을 실행하는 것보다 하나의 스크립트 파일을 작성하고 스크립트를 사용하여이 명령을 실행하십시오.
— Maulik Patel

나는 여기에 스크립트를 만드는 부분을 초석으로 만들었습니다. 이것은 파일 #!/bin/bash과 그 아래의 코드를 의미합니까? 아니면 내가 여기서 정말 바보인가요?
— Jacco van de Wijgaart

2
@Melebius 아니오, 특히 글로브 문자를 포함하는 경우 경로를 인용해서는 안됩니다. 당신이 원하는 것이 쉘에 의해 확장하고 그것을 차단하는 것 인용. 예를 들어보십시오 find '/u*' -name local. -name "foo*"glob 문자를 포함 할 때 이와 같은 지시문을 인용해야합니다.
— terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.