BSD에서 터치 명령의 시간 형식 변경

BSD에서 터치 명령의 시간 형식 변경

C 쉘에서 touch 명령을 사용하여 시간을 수정할 때 시간 형식을 변경하는 방법을 알고 싶습니다.

예를 들어

touch -a -t 051512002015 file.txt

이에 따라 접속 시간이 2015년 5월 15일 12시로 변경됩니다.

하고 싶은 일은 (지금 1학년)

touch -a -t 201505151200 file.txt

이것이 Linux에서 터치가 작동하는 방식입니다. 저는 Windows에서 UnxUtils를 사용하고 있는데, 이는 c-shell 터치를 사용한다고 거의 확신합니다. 순서가 일관적이기를 바랍니다. c-shell touch 명령을 변경할 수 있습니까?

답변1

이것은 쉘과 아무 관련이 없으며 touch외부 프로그램입니다.

역사적으로 날짜 매개변수에는 두 가지 구문이 있었습니다 touch.

touch -t CCYYMMDDhhmm.SS    # CC or CCYY may be omitted; .SS may be omitted
touch MMDDhhmmYY            # YY may be omitted

이 명령은유닉스 버전 7날짜 매개변수가 없습니다. BSD 버전에는 -t해당 옵션이 어딘가에 있습니다(모든 날짜 구성 요소가 내림차순으로 정렬됨).4.4BSD. 시스템 V(예:썬 OS 4.1.3) 직접적인 날짜 형식이며 연도로 끝납니다. 언제단일 Unix v2(POSIX:1992 기반), System V 형식은 더 이상 사용되지 않는 것으로 간주되어 더 이상단일 Unix v3(POSIX:2001).

스크립트에 표준(BSD) 구문을 사용하는 것이 좋습니다. BSD 구문이 필요한 레거시 시스템에서는 touch호환 가능한 구문을 배열하는 몇 가지 가능한 접근 방식이 있습니다.

  • 스크립트가 이전 시스템에서 실행되고 있음을 감지하면 매개변수를 뒤섞는 래퍼 함수를 ​​작성하세요.
  • PATH이전 디렉토리 앞에 기준을 충족하는 디렉토리를 배치하도록 배열하십시오 .
  • (지원해야 하는 정확한 레거시 변형 및 버전을 게시하면 더 구체적인 권장 사항을 얻을 수 있습니다.)

답변2

내가 아는 한, touch 명령은 쉘의 일부가 아닙니다. 적어도 내 tcsh 및 bash 매뉴얼 페이지에 따르면 터치에 대한 언급은 없습니다. 대신 터치 자체가 명령입니다. touch 명령은 Linux와 *BSD에서 약간 다르기 때문에 피할 수 없지만 필요한 경우 주위에 래퍼를 작성할 수 있습니다. 그러나 언뜻 보기에 -t 매개변수는 내 Ubuntu Linux 시스템과 FreeBSD 시스템에서 동일한 것처럼 보입니다. Ubuntu Linux 8.04의 터치 매뉴얼 페이지 형식은 다음과 같습니다.

touch [-t [[CC]YY]MMDDhhmm[.ss]]

FreeBSD 매뉴얼 페이지에서:

touch [-t [[CC]YY]MMDDhhmm[.SS]]

이상한 터치 시간 형식이 어디서 나온 것인지 잘 모르겠지만 아래를 살펴보세요. FreeBSD 매뉴얼 페이지에도 이 문자의 의미에 대해 자세히 설명되어 있지만 이는 FreeBSD에서 사용되는 이전 날짜 명령에서 사용하는 형식과 동일합니다.

date [-jnu] [[[[[CC]YY]MM]DD]hh]mm[.ss]

실제로 두 개의 터치 명령과 동일한 형식입니다. 이상하게도 Linux에서는 알 수 없는 이유로 date 명령에 다르고 모호한 형식을 사용합니다.

date [MMDDhhmm[[CC]YY][.ss]]

Linux가 왜 날짜의 연도를 분과 초 사이에 넣는지 모르겠습니다. 명확하지 않은 경우 모든 명령에 포함된 문자의 의미는 다음과 같습니다.

  • CC - 세기(00-99)
  • YY - 세기 연도(00-99)
  • MM - 월(01-12)
  • DD - 해당 월의 날짜(01-31)
  • hh - 시간(00-23)
  • mm-분(00-59)
  • ss - 초(00-61)(예, 59가 아니라 61)

관련 정보