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.