본문 바로가기
IT 배우기/이것저것

파일 명령어로 일괄 삭제하기(forfiles)

by To올라운더 2023. 6. 1.
반응형

 

Q. 언제 이런 파일 삭제 명령어를 쓰나요?

서버 관리나 개발 테스트를 진행하다 보면 로그파일이나 백업 파일들이 생각보다 많이 발생한다.

 

나의 경우에도 서버 관리를 하다 보면 

꼭 로그 파일을 확인해야하는 경우가 있는데,

그렇다고 언제 쓸지도 모를 로그 파일을 기한도 없이 남겨놓기도

수시로 내가 접속해서 지워주기도 번거로운게 사실이다.

 

이럴때 사용하는 방법이 배치파일을 이용한 파일 삭제이다.

배치파일은 간단히 설명하면,

사용해야 할 명령어들을 한번에 적어놓고 실행 하게 할 수 있게 만들어 놓은 명령어 스크립트(모음)

이라고 할 수 있는데, 우리는 특정 폴더에 정해 놓은 기간이 지난 파일을 지우는 명령어를 만들어 볼 예정이다.

 

전체적인 구성을 먼저 얘기해보면

 1) 특정 조건을 가지고 삭제를 진행할 명령어를 작성한다.

 2) 작성한 명령어를 bat 파일로 저장한다.

 3) bat 파일을 작업 스케쥴러에 등록한다.

라는 과정을 거치게된다.

반응형

 

 

1. 특정 조건을 가진 삭제 명령어 만들기.

사실 실제 파일을 삭제 하는 명령어는 간단하다.

del (경로\)filename.확장자
#(경로\) 생략 시, cmd가 실행된 위치에서 실행됨

*.* 으로 전체를 지울 수도 있지만,

우리가 원하는 건 특정 폴더에 특정 조건을 갖춘 파일을 삭제하기 원하기 때문에

(수정날짜 기준 삭제) 좀 더 디테일한 구별을 하고 싶다면, 아래의 forfiles를 이용한다.

 

 

명령어 구문은 생각보다 간단한데, 형식은 아래와 같다.

forfiles [/p "Path"] [/m "Mask&Format"] [/s] [/d "day"] [/c "Command"]

 - /p : 지정해 놓은 폴더 경로를 의미하는데,

        생략 시 cmd 창에 기본으로 나타나는 경로에서 실행되니

        생략하지 않고 꼭 넣는 습관을 가지는게 좋다. ex) "C:\DATA\ImageLog"

 - /m : 검색할 파일명이나 확장자에 대한 표기로 err_20230601.txt 와 같이 날짜가 포함된 파일이 있다면 

          err*.txt 또는 파일이름과 무관하게 확장자만 표기하려면 *.txt 같은 형태로 사용할 수 있다. 

          (*.* 로 모든 파일을 지울 수 있지만, 삭제 후 복원할 수 있는 방법이 없으므로

          파일명이나 확장자 등을 통해 잘못된 삭제를 방지할 수 있도록 최소한의 설정을 유지하는게 좋다.)

 - /s : 하위 폴더도 동일하게 검색할지에 대한 옵션. (일반적으로 적용)

 - /d : 최근 몇일 간의 파일을 지울지 설정. 날짜의 경우 2가지 형태로 입력할 수 있다.

    1) 오늘을 기준으로 날짜를 지정하는 방법과 2)특정 날짜를 입력하는 방법이다.

     ex) d-30 일 경우, 한달을 초과한 로그 파일을 삭제할 수 있다. "/d -30"

     ex) 2023년 3월 1일 기준으로 과거 영상을 선택할 경우, "/d - 2023-03-01"

 - /c : 실제 실행할 커맨드를 입력

     (삭제 작업을 진행 예정이므로, 처음 확인했던 del 명령어를 사용한다."cmd /c del @file") 

 

만약 C:\DATA\ImageLog 폴더에 있는 err_날짜.txt로 된 로그파일 중, 30일이 초과한 파일을 지우려하면,

forfiles /p "C:\DATA\ImageLog" /m err*.txt /s /d -30 /c "cmd /c del @file"

이라고 입력해주면 된다.

 

실행 전 꼭 경로와 파일 확장자 등을 포함한 조건들을 다시 한번 검토하자. 

2번 3번 확인하고 실행하자!!

실행 후 되돌릴 수 없다!!!

 

Tip) 추가 옵션이나 설명은 실제 cmd에서도 확인 가능하다.

cmd 또는 powsershell 에서 "forfiles /?" 를 입력해보면 아래와 같이 대략적인 설명과 예시 내용을 확인할 수 있다.

설명에서 보는 것과 같이 파일을 선택하고 명령을 실행하기 때문에 커맨드 내역을 수정하면

오늘 포스팅에서 다룬 파일 삭제 외에도 다른 명령들도 forfiles 를 이용하여 처리할 수 있다.

C:\Users\user>forfiles /?

FORFILES [/P pathname] [/M searchmask] [/S]
         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]

설명:
    파일(또는 파일 집합)을 선택하고 파일에 명령을
    실행합니다. 일괄 작업에 유용합니다.

매개 변수 목록:
    /P    pathname      검색을 시작할 경로를 지정합니다.
                        현재 작업 디렉터리(.)가 기본
                        폴더입니다.

    /M    searchmask    검색 마스크에 따라 파일을 검색합니다.
                        '*'이 기본 검색 마스크입니다.

    /S                  하위 폴더를 포함하도록
                        지정합니다. 예, "DIR /S"

    /C    command       각 파일에 실행할 명령을 지정합니다.
                        명령 문자열을 큰따옴표로 묶어야
                        합니다.

                        "cmd /c echo @file"이 기본 명령입니다.

                        명령 문자열에 다음 변수를 사용할 수
                        있습니다.
                        @file    - 파일 이름을 반환합니다.
                        @fname   - 확장명 없이 파일 이름을
                                   반환합니다.
                        @ext     - 파일의 확장명만
                                   반환합니다.
                        @path    - 파일의 전체 경로를 반환합니다.
                        @relpath - 파일의 상대 경로를
                                   반환합니다.
                        @isdir   - 파일 형식이 디렉터리인 경우 "TRUE"를
                                   반환하고 파일인 경우 "FALSE"를 반환합니다.
                        @fsize   - 파일의 크기(바이트)를
                                   반환합니다.
                        @fdate   - 파일을 마지막으로 수정한 날짜를
                                   반환합니다.
                        @ftime   - 파일을 마지막으로 수정한 시간을
                                   반환합니다.

                        명령줄에 특수 문자를 포함하려면
                         0xHH 형식의 16진수 코드(예, 탭은 0x09)를
                        사용하십시오. 내부 CMD.exe 명령
                        앞에는 "cmd /c"를 사용해야
                        합니다.

    /D    date          지정한 날짜와 마지막 수정한 날짜가 늦거나
                        같은(+) 또는 빠르거나 같은(-) 파일을
                        찾습니다.
                        날짜 포맷은 "yyyy-MM-dd"입니다.
                        또한 마지막 수정한 날짜가 현재 날짜에
                        "dd"일을 더한 날짜보다 늦거나 같은(+)
                         또는 현재 날짜에서 "dd"일을 뺀 날짜보다
                        작거나 같은(-) 파일을 찾습니다.
                        유효한 "dd" 범위는 0에서 32768까지입니다.
                        부호를 지정하지 않으면 "+"가 기본값입니다.

    /?                  이 도움말 메시지를 표시합니다.

예:
    FORFILES /?
    FORFILES
    FORFILES /P C:\WINDOWS /S /M DNS*.*
    FORFILES /S /M *.txt /C "cmd /c type @file | more"
    FORFILES /P C:\ /S /M *.bat
    FORFILES /D -30 /M *.exe
             /C "cmd /c echo @path 0x09 was changed 30 days ago"
    FORFILES /D 2001-01-01
             /C "cmd /c echo @fname is new since Jan 1st 2001"
    FORFILES /D +2023-6-1 /C "cmd /c echo @fname is new today"
    FORFILES /M *.exe /D +1
    FORFILES /S /M *.doc /C "cmd /c echo @fsize"
    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

 

2) 배치파일 작성과 작업스케줄러 등록은 다음 포스팅에 ...

 

반응형

'IT 배우기 > 이것저것' 카테고리의 다른 글

강의용 프로그램 추천(판서펜)  (0) 2023.06.07
DISK 스펙용량 vs 사용가능용량 차이  (0) 2023.06.02
Visual Studio Code 설치  (0) 2023.05.29
HTML 기초다지기2  (1) 2023.05.25
HTML 기초다지기 1  (0) 2023.05.24