날짜보다 오래된 다른 디렉토리로 파일 이동


27

오늘부터 오래된 파일을 이동하는 솔루션을 찾고 있습니다. 로그 파티션이 가득 차서 제거 할 수 없습니다. 그들은 오랫동안 필요합니다. 어쨌든 내가 생각해 낸 한 가지 해결책은 다음과 같습니다.

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

이게 효과가 있을까요? " -mtime 365 "로 인해 현재보다 오래된 파일이 새 위치로 이동됩니까?

고맙습니다!

답변:


40

당신은 거의 옳습니다. -mtime 365정확히 365 일이 지난 모든 파일이됩니다. 365 일 이상인 것을 원합니다 . +이렇게 하면 앞에 숫자를 추가 해야합니다 -mtime +365.

-maxdepth 1하위 디렉토리에서 항목을 이동하지 못하게 하는 플래그에 관심이있을 수도 있습니다 .

디렉토리가 아닌 파일 만 이동하고 있는지 확인 -type f하려면 행에 추가 하십시오.

줄의 끝에 우리 는 그것이 우리가 실행하는 명령의 끝임을 알 수 \;있도록 추가 find합니다.

따라서 줄은 다음과 같아야합니다.

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

안전한 측면을 유지하려면 먼저 mv 대신 ls -l을 수행하여 시작하십시오. 이렇게하면 다음과 같이 mv로 다시 실행하기 전에 원하는 파일을 정확하게 얻는 지 미리 확인할 수 있습니다.

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;

3
마음에 곰 mtime입니다 수정 시간 (이 아마 당신은 원하는 것을 같은 소리 - 그것은 대부분의 시간). 이러한 로그를 읽거나 자주 참조하는 경우 -atime(마지막 액세스 시간) 사용할 수 있습니다 .
voretaq7

2
이 줄의 끝에있는 백 슬래시는 무엇을합니까?
Ben Liyanage 2016 년

1
@BenLiyanage 백 슬래시는 뒤에 오는 세미콜론의 이스케이프 문자입니다. 세미콜론은 exec문장 의 끝을 의미합니다 . 에 대한 매뉴얼 페이지를 참조하십시오 find.
Jenny D는

4

위의 솔루션을 사용할 때주의하십시오.이 솔루션을 사용하여 모든 하위 폴더의 모든 파일을 이동하게되었습니다 !!!!

이 명령은 / source 디렉토리의 모든 파일과 소스 디렉토리의 모든 하위 폴더를 이동합니다.

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

대신 / sourcedirectory의 파일에만 -maxdepth 1 옵션을 사용하십시오.

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

가장 높은 등급의 답변에이 메모가 포함되어 있으며를 사용하는 것이 좋습니다 -type f. 하위 폴더가 이동되었지만 해당 폴더의 내용이 하위 폴더로 이동하지 않고 하위 폴더에 남아 있음을 의미한다는 의미입니까?
Austinian

1
아니요, 'find'는 / sourcedirectory에있는 모든 파일과 해당 / sourcedirectory에있는 모든 하위 폴더를 찾을 것입니다. '-maxdepth 1'은 'find'를 / sourcedirectory로만 제한합니다
harleygolfguy

BTW, 나는 이것을 최고 등급의 답변에 대한 주석으로 보냈을 것입니다. 좋은 답변이지만 평판이 없습니다. :)
harleygolfguy

0

이 명령을 사용하고 디렉토리가 아닌 파일 만 찾도록 지정하고 파일이 1 년보다 오래되었음을 지정하십시오.

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;

왜 사용해야 rm합니까? 명령은 로그 파일과 대상 디렉토리를 모두 삭제합니다.
Sven

Ops, 내 실수, @mYzk 가이 파일을 제거하려고한다고 생각합니다. 편집
cuonglm

0

파일에 자주 액세스하는 경우 atime과 함께 아래 명령을 사용할 수 있습니다

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;

0
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

올바른 슬래시를 제거합니다. /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

내 테스트에서 find: missing argument오류 를 복제 할 수 없었지만 후행 슬래시를 삭제하는 /sourcedirectory것이 정확 하다는 데 동의 합니다.
guzzijason
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.