Windows 7에서 날짜 / 시간 스탬프를 업데이트하기 위해 디렉토리 (하위 디렉토리 포함)의 모든 파일을 재귀 적으로 터치하려면 어떻게해야합니까?
Windows 7에는이를 수행 할 수있는 메커니즘이 있습니까?
Windows 7에서 날짜 / 시간 스탬프를 업데이트하기 위해 디렉토리 (하위 디렉토리 포함)의 모든 파일을 재귀 적으로 터치하려면 어떻게해야합니까?
Windows 7에는이를 수행 할 수있는 메커니즘이 있습니까?
답변:
몇 가지 가능성이 있습니다.
유닉스의 포트를 사용하여 touch
명령을 단순히 결합 find
과 touch
유닉스 방식이다. 몇 가지 선택이 있습니다. GNUWin32 , cygwin 및 unxutils 가 종종 언급됩니다 . 덜 알려져 있지만 더 나은 어떤면에서의 도구 SFUA 유틸리티 툴킷 에서 실행, UNIX 기반 응용 프로그램 용 하위 시스템 윈도우 7 얼티밋 에디션 및 Windows Server 2008 R2와 함께 상자에 바로 제공됩니다. (Windows XP의 경우, Services for UNIX 버전 3.5를 다운로드 하여 설치할 수 있습니다 .)이 툴킷에는 Korn 및 C 쉘 에서 다음 과 같은 다양한 명령 행 TUI 도구 가 있습니다.mv
du
perl
그리고 awk
. x86-64와 IA64 맛뿐만 아니라 x86-32로도 제공됩니다. 이 프로그램은 에뮬레이터 DLL (예 cygwin1.dll
:)을 Win32보다 계층화 하지 않고 Windows의 고유 한 적절한 POSIX 환경에서 실행 합니다. 그리고 네, 툴킷은 가지고 touch
와 find
,뿐만 아니라 일부 (300) 등이 있습니다.
이러한 모든 툴킷은 물론 모든 파일을 만질 때마다 별도의 프로세스를 실행한다는 잘 알려진 단점이 있습니다. 다음과 같은 대안에는 문제가 없습니다.
touch
사람들이 작성하고 게시 한 많은 기본 Win32 명령 중 하나를 사용하십시오 . 그들 중 많은 사람들이 유닉스 find
를 감쌀 필요없이 재귀를 수행하는 옵션을 지원 합니다. (그들은이 모든 후, 찾고있는 userbase가 대상 touch
이 포팅 유닉스 명령의 전체 부하가 없기 때문에 명령을 사용합니다.) 그 중 하나 인 스테판 Duguay의touch
당신이 가지고 볼 수있는 --recursive
옵션을 선택합니다.
CMD의 신비한 신비로 영리하십시오. 다른 답변에서 언급했듯이 명령 COPY /B myfile+,,
의 알려진 "플러스"구문을 사용하여 파일의 마지막 수정 날짜 스탬프를 업데이트합니다 COPY
(자세한 내용은 여기서 우연히 찾을 수 있음 ). 이것은 물론 FOR /R
다른 답변에서 암시 된 것처럼 재귀 적으로 작업을 수행하기 위해 결합 될 수 있습니다 .
대체 명령 인터프리터를 사용하고 CMD보다 영리하고 단순합니다. JP Software의 TCC / LE 는 그러한 것 중 하나입니다. 그것은 추가 /S
로 옵션 의 COPY
명령을 하나를 사용할 수 있다는 것을 의미 COPY /S
A에 대한 필요성 제거하기 위해 "플러스"구문 FOR
래퍼. 그러나 TCC / LE에는 옵션 을 직접 지원하는 내장 TOUCH 명령이 있다는 점을 고려할 때 여전히 인생을 불필요하게 어렵게 만들고 /S
있습니다.
COPY /B file+,,
갈 수있는 방법은, 아니 엑스트라를 필요로하지 않습니다 ... :-)
(ls file).LastWriteTime = DateTime.now
기존 Windows 기능 만 사용하려면 (추가로 설치하지 않아도 됨) 다음 중 하나를 시도하십시오.
forfiles /P C:\Path\To\Root /S /C "cmd /c Copy /B @path+,,"
(지정된 경로에서 시작하는 모든 파일을 재귀 적으로 "터치")
또는
forfiles /S /C "cmd /c Copy /B @path+,,"
(현재 디렉토리에서 시작하는 모든 파일을 재귀 적으로 "터치")
나는 이것이 아마도 너무 늦다는 것을 알고 있지만 그럼에도 불구하고 다른 누군가가 같은 것을 필요로 할 경우를 대비하여 대답을 남길 것입니다.
John T의 대답은 Windows 7에서 나에게 도움이되지 못했습니다. 일부 연구 결과 SKTimeStamp 라는 유틸리티가 발견되었습니다.이 유틸리티는 완벽하게 작동합니다.
작동 방식에 대한 자세한 내용은 다음과 같습니다. http://www.trickyways.com/2009/08/how-to-change-timestamp-of-a-file-in-windows-file-created-modified-and -accessed / .
수행해야 할 단계는 다음과 같습니다.
짜잔! 모든 파일이 업데이트되었습니다! 유닉스 유틸리티 나 명령 줄이 필요 없습니다.
Powershell 사용 :
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
The property 'LastWriteTime' cannot be found on this object.
위의 John T의 답변과 관련하여 :
나는 find
'와 exe 로 'exec 명령을 끝내는 것과 ' \;
+' 를 끝내는 것의 차이점을 이해하려고했습니다 (후자는 알지 못했습니다).
이것은 유용했다 : ( 여기에서 )
-exec command ;
명령을 실행하십시오. 0 상태가 반환되면 true입니다. 찾은 다음의 모든 인수는 ';'로 구성된 인수까지 명령에 대한 인수로 간주됩니다. 발생합니다. 문자열 '{}'은 (는) 일부 버전의 find에서와 같이 단독 인수가 아닌 명령 인수에서 발생하는 모든 위치에서 처리되는 현재 파일 이름으로 바뀝니다.
-exec command {} +
이 -exec 조치 변형은 선택된 파일에서 지정된 명령을 실행하지만 명령 행은 선택한 각 파일 이름을 끝에 추가하여 빌드됩니다. 명령의 총 호출 수는 일치하는 파일 수보다 훨씬 적습니다. 명령 행은 xargs가 명령 행을 빌드하는 것과 거의 같은 방식으로 빌드됩니다. 명령 내에서 하나의 '{}'인스턴스 만 허용됩니다. 명령은 시작 디렉토리에서 실행됩니다.
c:\myfolder
2 개의 파일이 들어 있는 폴더 를 고려 a.txt
하고b.txt
find . -type f -exec touch {} +
해석 : touch a.txt b.txt
find . -type f -exec touch {} \;
과 같이 해석됩니다.touch a.txt
touch b.txt
따라서 # 1이 훨씬 빠릅니다 (그러나 다음 명령 exec
은 하나의 {}
자리 표시 자만 가질 수 있다는 제한이 있습니다 ).