파일 수명을 확인하고 이름을 바꾸는 쉘 스크립트

파일 수명을 확인하고 이름을 바꾸는 쉘 스크립트

저는 Linux를 처음 사용하고 있으며 현재 지정된 디렉터리에서 N일 된 모든 파일을 확인하고 이름을 바꾸는 쉘 스크립트를 만들고 싶습니다. 예:

/home/foo/oldfile.txt
2019-01-01

입력하다

/home/foo/oldfile.txt.old

어떻게 해야 하나요?

답변1

N일(이 예에서는 N=30)보다 오래된 파일의 이름을 바꾸려면 다음을 시도하십시오.

find . -type f -mtime +30 -exec sh -c 'mv -i "$1" "$1.old"' MV {} \;

위의 명령은 현재 디렉터리에서 재귀적으로 검색합니다. 하위 디렉터리에 드롭다운하지 않으려면 다음을 사용하세요.

find . -maxdepth 1 -type f -mtime +3 -exec sh -c 'mv -i "$1" "$1.old"' MV {} \;

안전을 위해 먼저 이 명령을 시도하고 결과가 마음에 들면 다음을 제거하는 것이 좋습니다 echo.

find . -maxdepth 1 -type f -mtime +3 -exec sh -c 'echo mv -i "$1" "$1.old"' MV {} \;

어떻게 작동하나요?

  • find .

    find그러면 현재 디렉토리에서 명령이 시작됩니다 ..

  • -type f

    이는 find일반 파일만 찾도록 지시합니다.

  • -mtime +30

    즉, find30일이 지난 파일만 검색됩니다. 30원하는 번호로 바꾸세요 .

    파일 수명을 반올림하는 특별한 방법 으로 인해 find"30일 이상"이라는 정확한 기한이 예상한 것과 다를 수 있습니다. man find자세히보다.

  • -exec sh -c 'mv -i "$1" "$1.old"' MV {} \;

    이는 발견된 각 파일에 대해 명령을 실행하라는 의미입니다 find. mv-i옵션은 mv기존 파일을 덮어쓰기 전에 대화식으로 묻도록 지시합니다. 그러한 옵션이 많이 있습니다. man mv자세히보다.

GNU 찾기 또는 유사

findGNU와 같은 일부 버전에서는 find위의 사용을 불필요하게 만듭니다(팁:sh서두르다):

find . -type f -mtime +30 -exec mv -i {} {}.old \;

이는 필수 사항이 아닙니다.POSIX그러므로 휴대가 불가능할 수도 있습니다.

관련 정보