저는 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
즉,
find
30일이 지난 파일만 검색됩니다.30
원하는 번호로 바꾸세요 .파일 수명을 반올림하는 특별한 방법 으로 인해
find
"30일 이상"이라는 정확한 기한이 예상한 것과 다를 수 있습니다.man find
자세히보다.-exec sh -c 'mv -i "$1" "$1.old"' MV {} \;
이는 발견된 각 파일에 대해 명령을 실행하라는 의미입니다
find
.mv
이-i
옵션은mv
기존 파일을 덮어쓰기 전에 대화식으로 묻도록 지시합니다. 그러한 옵션이 많이 있습니다.man mv
자세히보다.
GNU 찾기 또는 유사
find
GNU와 같은 일부 버전에서는 find
위의 사용을 불필요하게 만듭니다(팁:sh
서두르다):
find . -type f -mtime +30 -exec mv -i {} {}.old \;
이는 필수 사항이 아닙니다.POSIX그러므로 휴대가 불가능할 수도 있습니다.