최신 파일 타임스탬프를 사용하여 디렉터리 생성

최신 파일 타임스탬프를 사용하여 디렉터리 생성

디렉터리에 있는 최신 파일 2개의 타임스탬프를 기반으로 디렉터리를 생성한 다음 해당 2개 파일을 새로 생성된 디렉터리에 복사하려고 합니다. 예를 들어, 그래서

-rw-r--r-- 1 root root 0 Sep 24 12:01 a

-rw-r--r-- 1 root root 0 Sep 24 12:01 b

라는 디렉토리를 생성하고 현재 디렉토리의 최신 파일인 해당 디렉토리 에 20190924복사하고 싶습니다.ab

답변1

이 zsh 스크립트는 현재 디렉터리에서 두 개의 최신(일반) 파일을 선택하고, 가장 최근 파일의 수정 타임스탬프를 수집하고, 해당 타임스탬프를 YYYYmmdd 형식으로 변환하고, 디렉터리를 생성한 다음, 두 개의 최신 파일을 디렉터리에 복사합니다.

#!/bin/zsh

newest2=( *(.om[1,2]) )
dsec=$( stat -c %Y "${newest2[1]}" )
dnam=$( date -d @"$dsec" +%Y%m%d )
mkdir "$dnam"
cp -- "${newest2[@]}" "$dnam"

첫 번째 줄에서는 한정자(괄호 안)를 사용하여 와일드카드를 확장하여 할당합니다 newest2. *자격 요건:

  • .--순수 파일
  • om-- 수정 시간을 기준으로 정렬(최신 항목부터 오래된 항목 순)
  • [1,2]-- 1부터 2까지의 요소만 포함하도록 목록을 분할합니다.

stat그런 다음 최신 파일의 수정 시간(초 단위)을 요청합니다 . 이 날짜는 date우리가 원하는 형식으로 디렉터리 이름을 반환하는 GNU로 전달됩니다. 디렉터리를 생성한 후 이 cp명령은 두 파일을 디렉터리에 복사합니다.

답변2

여기서 우리는 당신이 시작하고 싶다고 가정합니다첫 번째문서:

디렉터리 생성

dir="$(mkdir -p $(ls -ltp --full-time | grep -v / | awk '{print $6}' | sed -n '2p' | sed 's/-//g'))"

grep -v /시간별로 정렬되어 전체 시간을 표시하는 파일만 나열합니다 lt(날짜가 있음) --full-time.

ls -ltp --full-time | grep -v /

날짜 열 선택

awk '{print $6}'

첫 번째 파일에 해당하는 두 번째 줄을 검색하고(첫 번째 줄은 파일 수를 표시함) 대시를 제거합니다.

sed -n '2p' | sed 's/-//g'

파일 복사

cp $(ls -ltp --full-time | grep -v / | awk '{print $9}' | sed -n '2,3p' | tr '\n' ' ') "${dir}/"

grep -v /시간별로 정렬되어 전체 시간을 표시하는 파일만 나열합니다 lt(날짜가 있음) --full-time.

ls -ltp --full-time | grep -v /

파일 이름을 검색합니다.

awk '{print $9}'

첫 번째 파일과 두 번째 파일을 선택하세요.

sed -n '2,3p'

한 줄에 복사를 수행할 수 있도록 새 줄을 공백으로 바꾸세요.

tr '\n' ' '

명령은 다음과 같습니다

cp x z 20190924/

관련 정보