2016-10-29 6 views
3

나는 매일 파일을 제공하는 디렉토리가 있습니다. 이제 해당 파일을 날짜순으로 압축하고 싶습니다. 어쨌든 동일한 날짜에 착륙 한 파일을 그룹화/나열 할 수 있습니까?파일 목록을 날짜순으로 그룹화하십시오.

는 모두 고유하기 때문에 그래서, 그룹 방법 접미사/접두사와 파일이없는 디렉토리

-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 
+0

날짜에 따라 다른 디렉토리에 파일을 배치 할 수 있다면 도움이됩니까? –

+0

@SulavTimsina 만약 당신이 그 코드를 줄 수 있습니다. 나는 그것들을 지퍼로 만들 수 있습니다 :) –

답변

2

당신이 date 명령의 GNU 버전이있는 경우, 당신은 -r 플래그 파일의 수정 날짜를 얻을 수 있도록, 매우 유용 할 수 있습니다. 예를 들어 질문에 파일 목록이 있으면 date +%b_%d -r hello.txtOct_14을 출력합니다.

이 사용

, 당신은 파일을 통해 루프 수 및 구축 tar 파일 :

  • tar 파일이 존재하지 않는 경우, 하나의 파일
  • tar 파일이 존재하는 경우에 그것을 만들,

    #!/usr/bin/env bash 
    
    tarfiles=() 
    
    for file; do 
        tarfile=$(date +%b_%d.tar -r "$file") 
        if ! [ -f "$tarfile" ]; then 
         tar cf "$tarfile" "$file" 
         tarfiles+=("$tarfile") 
        else 
         tar uf "$tarfile" "$file" 
        fi 
    done 
    
    for tarfile in "${tarfiles[@]}"; do 
        gzip "$tarfile" 
    done 
    
    : 타르는 다음과 같이

을 파일 압축, 그것은 루프 후

  • 에 파일을 추가

    보관할 파일 목록을 명령 줄 매개 변수로 전달하십시오 (예 : /path/to/files이 질문에 나열된 파일을 보관하려는 디렉터리 인 경우)이 스크립트를 ~/bin/tar-by-dates.sh에 저장하면 다음과 같이 사용할 수 있습니다. 이 :

    cd /path/to/files 
    ~/bin/tar-by-dates.sh * 
    
  • +0

    적어도 내가 실행중인 코드에 오류가 콘솔에 아무것도 나오지 않습니다. 'set -x'로 시도했는데, 어떤 이유로 그것은 for 루프에 들어 있지 않습니다. –

    +0

    아카이브하려는 파일 목록을 명령 행 매개 변수로 전달하십시오. 나는 더 많은 설명을 추가했다. – janos

    +0

    이 스크립트를 감싸고있는 다른 스크립트를 작성하고 필요한 명령을 입력하십시오. 파일에서 구성을 읽고 cron 작업에서 사용하는 방법에 대한 자세한 단계가 필요한 경우에는 다른 질문에 실제로 속한다고 생각합니다. – janos

    0

    (Month_Day.tar 파일 이름) 쌍 제로로 분리 된 목록을 작성하고 해당 아카이브에 각 파일을 추가 xargs를에게를 사용

    find . -maxdepth 1 -mindepth 1 -type f -printf "%Tb%Td.tar\0%f\0"|xargs -n 2 -0 tar uf 
    
    관련 문제