본문 바로가기
stdFrog/알쓸잡

[Windows CMD] 파일 백업 & 갱신된 파일 목록 확인

by stdFrog 2021. 6. 30.

그간 공부를 한다는 핑계로 블로그 관리를 소홀히 했습니다 전하고 싶은 얘기가 많은데 조금 더 미뤄야 할 거 같습니다.

오늘은 파일 백업 방법에 대하여 간단하게 작성해볼 생각입니다.

마우스나 Ctrl + C로 복사하는 방법도 있지만 갱신된 파일이 무엇인지 모르거나 혹은, 파일의 개수가 많고 여러 폴더에 나눠져 있을 땐 번거로울 수 있습니다.

이럴 때 명령 프롬프트를 이용하면 훨씬 쉽고 빠르게 작업하실 수 있습니다.

네트워크 혹은, 폴더 간의 공유 및 복사/이동에 사용되는 Xcopy와 Forfiles 두 가지 명령어의 사용법을 정리해봤습니다.


기본 구문 및 설명


Xcopy

기본 구문은 다음과 같습니다.

> Xcopy [원본] [대상] [옵션(스위치)]

- Xcopy는 디렉토리 구조 자체를 복사할 때 유용한 명령어입니다.

 

즉, 백업을 할 때 사용하기 좋은 명령어로 보통 드라이브 간 디렉토리의 구조나 파일을 그대로 복사할 때 사용합니다.

 옵션을 추가하여 날짜를 지정한 후 세부적으로 탐색하거나 특정 확장자 및 디렉토리를 제외할 수 있습니다. 반대로 디렉토리를 추가하거나 특정 확장자를 갖는 파일만 복사할 수도 있습니다.

 

※ 사용 예시는 아래를 참고해주시기 바랍니다.


Forfiles

기본 구문은 다음과 같습니다.

> ForFiles [옵션] [대상]

- 여러 파일에 인수를 전달하는 일괄 작업에 유용한 명령어입니다.


명령어에 종속된 하위 매개 변수를 사용한 일괄 작업이 가능하여 파일을 실행하거나 수정하는 등의 관리 목적으로 사용됩니다. 일자별, 특성별로 파일을 나눠볼 수 있고 C 스위치를 이용해 명령줄을 추가할 수 있습니다.

 

※ 사용 예시는 아래를 참고해주시기 바랍니다.


사용법


파일 백업 [Xcopy]

> Xcopy [복사할 원본 폴더]\*.* E:\[생성할 폴더 이름] /DHKYCSIL

EX_
> Xcopy C:\Com\*.* E:\Com /DHKYCSIL
- C:\드라이브 Com폴더의 모든 항목을 새로운 드라이브에 그대로 복사합니다. (하위 디렉터리 포함)

> Xcopy C:\Com\STF\*.* E:\Com /DHKYCSIL
- C:\드라이브 Com\STF 폴더에서 수정/추가된 파일을 E:\Com 하위 디렉토리 및 파일과 비교하고 자동으로 복사합니다.

→ 복사할 원본과 대상을 지정하고 해당 경로에 원본과 같은 폴더가 없는 경우 새로 생성하여 갱신/수정되거나 대상에 없는 파일을 전부 복사합니다.

  • 대상에 원본과 같은 디렉토리가 있는 상태라면 /I 스위치를 제외하여야 합니다.
  • /L 스위치를 포함하면 복사를 진행하지 않고 복사할 파일 및 디렉토리의 목록만 화면에 출력합니다. 
  • 복사를 진행하기 위해선 /L스위치를 제외하여야 합니다.

 

각 옵션(스위치)의 설명은 다음과 같습니다.

  • /D : 파일의 날짜/시간을 비교하여 원본이 갱신된 경우만 복사합니다.
  • /H : 히든 파일과 시스템 파일도 복사합니다.
  • /K : 파일의 속성까지 복사합니다.
  • /Y : 덮어 쓸지 물어보는 것을 생략합니다.
  • /C : 오류가 발생해도 강제로 진행합니다.
  • /S : 비어있지 않은 디렉토리와 하위 디렉토리를 복사합니다.
  • /I : 대상에 원본 폴더와 같은 폴더가 없을 경우 폴더를 추가합니다.
         (이름을 지정해줘야 됩니다)
  • /L : 복사할 파일의 목록을 출력합니다.
  • /Exclude : 지정한 디렉토리나 확장자를 제외하고 복사합니다.
    (메모장에 제외할 디렉토리나 확장자를 작성하고 저장한 후 저장한 파일의 이름을 첨부하여야 합니다)
    Ex_) >Xcopy .\*.* E:\ /Exclude:파일이름.txt

 

 

 



갱신 파일 목록 확인 [ForFiles]

(1) 갱신 파일 목록 확인
> ForFiles /P [경로] /S /M *.* /D 0 /C "Cmd /C Echo @File"

(2) 갱신 파일 경로 확인
> ForFiles /P [경로] /S /M *.* /D 0 /C "Cmd /C Echo @Path"

(3) 갱신 파일 복사 후 이동
> ForFiles /P [경로] /S /M *.* /D 0 /C "Cmd /C Copy @File @Fname_2.@Ext && Move @File [경로]"

(1). 해당 경로의 하위 디렉토리를 포함하여 오늘 갱신된 모든 파일 목록을 보여줍니다.

(2). 해당 경로의 하위 디렉토리를 포함하여 오늘 갱신된 모든 파일의 경로를 보여줍니다.

(3). 해당 경로의 하위 디렉토리를 포함하여 오늘 갱신된 모든 파일을 "[파일_2]"와 같은 이름으로 복사본을 생성하고 지정한 경로로 원본 파일을 이동시킵니다.

  • 특정 날짜에 수정된 파일만 확인하고 싶다면 [/D 2021-05-30]과 같이 날짜를 지정해주시면 됩니다.

각 옵션(스위치)의 설명은 다음과 같습니다.

  • /P : 검색을 시작할 경로를 지정합니다.
  • /M : 마스크에 따라 파일을 검색합니다.
  • /S : 하위 폴더를 포함하여 검색합니다.
  • /D : 날짜를 지정하여 검색합니다. 형식은 "yyyy-MM-dd"이며 (+) / (-) 부호를 사용할 수 있습니다.
  • /C : 각 파일에 실행할 명령을 지정합니다. 명령 문자열에 다음 변수를 사용할 수 있습니다.
@file       - 파일 이름을 반환합니다.
@fname   - 확장명 없이 파일 이름을 반환합니다.
@ext       - 파일의 확장명만 반환합니다.
@path     - 파일의 전체 경로를 반환합니다.
@relpath  - 파일의 상대 경로를 반환합니다.
@isdir      - 파일 형식이 디렉토리인 경우 "TRUE"를 반환하고 파일인 경우 "FALSE"를 반환합니다.
                       Ex_)  > FORFILES /M *.* /C "cmd /c echo @file @isdir @fsize"
                              > FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

@fsize     - 파일의 크기(바이트)를 반환합니다.
@fdate    - 파일을 마지막으로 수정한 날짜를 반환합니다.
@ftime    - 파일을 마지막으로 수정한 시간을 반환합니다.

 

 

 


이런 글을 작성할 때면 좀 더 간략하게 정확한 정보를 전달하지 못해 아쉬움이 남습니다. 인터프리터를 활용한 명령어 사용법이나 윈도우 기능과 관련된 글은 조금 더 공부하여 추후 수정하겠습니다.

 

감사합니다.

 

반응형

댓글