최근 수정된 파일

최근 수정된 파일

폴더와 해당 내용의 백업을 생성하는 스크립트를 작성 중입니다. 백업할 폴더 이름을 입력하라는 메시지가 사용자에게 표시됩니다. 백업 복사본의 이름은 다음 규칙을 사용하여 지정됩니다.원본 폴더 이름_폴더에서 마지막으로 수정된 파일의 날짜 및 시간. 스크립트는 복사를 잘 수행하지만 파일이 마지막으로 수정된 날짜와 시간을 추출하는 방법이 혼란스럽습니다.

예는 다음과 같습니다.

  1. 사용자는 Graphite 폴더와 그 내용을 복사하기 위해 프롬프트에서 Documents/Graphite를 입력합니다.
  2. Graphite 폴더에는 파일과 파일이 포함된 여러 하위 폴더가 포함되어 있습니다.
  3. Graphite 폴더와 하위 폴더에서 가장 최근에 수정된 파일의 이름은 index.js이고 날짜/시간 스탬프가 2020년 1월 28일 14:28:54인 서비스 하위 폴더에 있습니다.

    위에 설명된 예의 경우 스크립트 이 작업을 수행하려면 두 가지 작업이 필요합니다.
    a) 터미널은 가장 최근에 수정된 파일에 대해 다음을 출력합니다.
    2020-01-28 14:28:54 ./services/index.js
    b) services/index.js 파일의 마지막 수정 날짜 및 타임스탬프는 다음 형식의 변수에 저장됩니다 2020-01-28_14-28-54

    . 날짜/시간을 저장하는 목적 변수에 넣은 이유는 복사된 폴더의 이름을 수정하는 데 사용되기 때문입니다.

이에 대한 반응우편 엽서작성자: @Heppo, 날짜: 2011년 9월 16일 18:21 비슷한 사용 사례에 이것을 권장합니다.

#!/bin/bash
find $1 -type f -print0 | xargs -0 stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head

이는 2개 이상의 파일을 표시하고 타임스탬프 형식이 다르다는 점을 제외하면 위의 요구 사항 a)에 가깝습니다. explainshell.com에 명령을 삽입했음에도 불구하고 요구 사항 a)를 충족하도록 변경하는 방법을 모르겠습니다.

저는 Linux를 처음 사용하므로 이 두 가지 요구 사항을 얻는 방법에 대한 지침을 주시면 감사하겠습니다.

답변1

Ubuntu를 사용하고 있고 findGNU를 사용할 수 있으므로 이 옵션을 사용하여 최신 수정 날짜를 인쇄할 수 있습니다 -printf.

find "$1" -type f -printf '%TY-%Tm-%Td_%TH-%TM-%TS\n' | sort -r | head -n1

다음과 같이 출력됩니다

2020-01-28_14-28-54.0000000000

불행하게도 초의 소수 부분을 제거해야 합니다. 왜냐하면 그것이 없으면 초를 인쇄할 수 없기 때문입니다.

lastmod=$(find "$1" -type f -printf '%TY-%Tm-%Td_%TH-%TM-%TS\n' | sort -r | head -n1)
lastmod=${lastmod%.*} # strip fractional part

관련 정보