디렉터리에 있는 최신 파일 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
복사하고 싶습니다.a
b
답변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/