날짜별로 파일 그룹 목록 가져오기

날짜별로 파일 그룹 목록 가져오기

매일 오는 파일이 포함된 디렉토리가 있습니다. 이제 해당 파일 그룹을 날짜별로 압축하고 싶습니다. 어쨌든 같은 날짜에 도착한 파일을 그룹화하거나 나열할 수 있습니까?

디렉토리에 아래 파일이 있다고 가정하십시오.

-rw-r--r--. 1 anirban anirban    1598 Oct 14 07:19 hello.txt
-rw-r--r--. 1 anirban anirban    1248 Oct 14 07:21 world.txt
-rw-rw-r--. 1 anirban anirban  659758 Oct 14 11:55 a
-rw-rw-r--. 1 anirban anirban    9121 Oct 18 07:37 b.csv
-rw-r--r--. 1 anirban anirban     196 Oct 20 08:46 go.xls
-rw-r--r--. 1 anirban anirban    1698 Oct 20 08:52 purge.sh
-rw-r--r--. 1 anirban anirban   47838 Oct 21 08:05 code.java
-rw-rw-r--. 1 anirban anirban 9446406 Oct 24 05:51 cron
-rw-rw-r--. 1 anirban anirban  532570 Oct 24 05:57 my.txt
drwxrwsr-x. 2 anirban anirban      67 Oct 25 05:05 look_around.py
-rw-rw-r--. 1 anirban anirban   44525 Oct 26 17:23 failed.log

따라서 접미사/접두사를 사용하여 파일을 그룹화할 수 있는 방법은 없습니다. 모든 파일이 고유하기 때문입니다. 이제 찾고 있는 명령을 실행하면 날짜별 그룹을 기준으로 아래와 같은 줄 집합이 표시됩니다.

[ [hello.txt world.txt a] [b.csv] [go.xls purge.sh] [code.java] ... ] and so on.

그 목록을 사용하여 반복해서 아카이브를 만들 것입니다.

tar -zvcf Oct_14.tar.gz hello.txt world.txt a

답변1

를 사용 하면 zsh키가 날짜이고 값이 해당 날짜에 마지막으로 수정된 NUL로 구분된 파일 목록인 연관 배열을 사용합니다.

zmodload -F zsh/stat b:zstat
typeset -A files
for file (./*) {
  zstat -LA date -F %b_%d +mtime $file &&
    files[$date]+=$file$'\0'
}
for date (${(k)files})
  echo tar zcvf $date.tar.gz ${(0)files[$date]}

행복할 때 제거하세요 echo.

월 이름 약어( %bstrftime 형식)는 현재 로케일의 언어( Oct영어 시스템, Okt독일어 시스템 등)로 표시됩니다. 사용자의 로케일에 관계없이 항상 영어 이름을 만들려면 로케일을 로 강제 설정 C하세요 LC_ALL=C zstat....

GNU 도구를 사용하면 다음과 같은 작업을 수행할 수 있습니다.

find . ! -name . -prune ! -name '.*' -printf '%Tb_%Td:%p\0' |
  awk -v RS='\0' -F : -v q=\' '
    function quote(s) {
      gsub(q, q "\\" q q, s)
      return q s q
    }
    {
      date=$1
      sub(/[^:]*:/, "", $0)
      files[date] = files[date] " " quote($0)
    }
    END {
      for (date in files)
        print "tar zcvf " quote(date ".tar.gz") files[date]
    }'

행복할 때 파이프하세요 sh.

답변2

while read date a b filename; do 
    zip -g ../$date.zip "$filename"
done <<< $(stat -c "%y %n" *)

답변3

아마도 제가 질문을 잘못 이해한 것 같습니다만,

ls -ls |grep '10월 26일' > oct26.list

10월 26일 파일 목록을 제공합니다. 예를 들어 추가 grep "| grep 09:" 등을 사용하여 몇 시간 동안 동일한 작업을 수행할 수 있습니다. 그런 다음 필요한 모든 작업을 oct26.list 목록으로 수행하십시오.

관련 정보