재귀적으로 정렬된 RAR 아카이브 생성

재귀적으로 정렬된 RAR 아카이브 생성

여러 가지 이유로 압축된 tar 대신 일부 데이터를 저장하기 위해 RAR 아카이브를 사용하기로 결정했습니다.

한 가지만 제외하면 이 결정에 만족합니다. 정렬된 파일을 저장할 방법을 찾을 수 없습니다. 아카이브를 쿼리할 계획이고 결과가 정렬되어야 하기 때문에 파일의 순서가 중요합니다.
내 파일 구조는 다음과 같습니다.

2000/
  001.txt
  002.txt
  ...
2001/
  ...
2002/
...
2011/

따라서 폴더는 연도를 나타내고 그 안에 있는 파일에는 번호가 매겨져 있습니다. 을 사용 ls하거나 tar임의의 프로그램에서 예상대로 파일을 나열합니다. 비재귀적 rar아카이브를 생성하려고 하면(예: 2000 폴더의 파일만 압축) 파일이 순서대로 저장되지만, 파일을 재귀적으로 추가( )하려고 하면 rar a -r파일이 엉망이 됩니다.

다음 외에는 스위치를 찾을 수 없습니다.

n@            Read file names to include from stdin

나는 그것을 구할 수 있는 행운이 없었습니다.

다음과 같이 각 파일을 호출 할 수 있습니다 rar.

for f in */*.txt ; do rar a -r archive.rar $f ; done

하지만 그건 그다지 현명하지 않습니다.

어떤 아이디어가 있나요?


아래 답변에 댓글을 달았듯이 질문을 업데이트하고 싶습니다.

위의 그다지 영리하지 않은 줄과 비슷하게 정렬된 파일을 저장했습니다.

for d in */ ; do rar a -r archive.rar $d*.txt ; done

물론 이것은 위에서 언급한 특정 시나리오에서는 잘 작동합니다.

n@스위치 사용법을 아직 못봤습니다. 나는 사용한다RAR 4.10 beta 5

답변1

우분투에서 rar 사용하기

(RAR 3.90 베타 2 저작권 (c) 1993-2009 Alexander Roshal 2009년 6월 3일)

당신이 할 수 있는 가장 좋은 일은:

find * -type f | sort | xargs rar a ../eliezer.rar

이것을 사용하여 압축을 푼다:

unrar x eliezer.rar

적어도 이것은 모든 파일에 대해 rar을 호출하지 않습니다.

-n@ 스위치는 파일에서만 작동하는 것 같습니다. 예를 들어:

find * -type f | rar a ../eliezer.rar -n@

CWD에 일반 파일이 없으면 "경고: 파일 없음"이 생성되지만,

find * -type d | rar a ../eliezer.rar -n@ -r

디렉토리에 적용됩니다.

rar 재귀 스위치 -r은 dirent 구조(man readdir)에 나타나는 순서대로 파일 이름을 읽습니다. 따라서 rar에 패킹된 파일의 순서를 변경하는 유일한 방법은 rar를 호출하기 전에 디렉터리 파일 구조에서 파일의 순서(보통 생성 순서)를 조작하는 것입니다. 디렉터리 편집기를 사용하여 이 작업을 수행할 수 있지만 일부 파일 시스템 유형은 가비지 수집 또는 최적화의 일부로 디렉터리 구조의 파일 순서를 변경할 수 있다는 점에 유의하세요.

답변2

데이터가 얼마나 희귀하게 "저장"되는지 정말로 관심이 있으신가요? 그러면 적절하게 정렬된 목록이 제공
되지 않습니까 ?unrar v archive.rar |sort

답변3

질문에 명시된 것과 비슷한 문제가 발생하여 다음 해결책을 생각해 냈습니다.

for d in *; do find "${d}/" -type f | sort | rar a "${d}.rar" @; done
  1. 모든 디렉토리를 나열합니다(해당 폴더의 디렉토리만!).
  2. 디렉토리 중 하나에 있는 모든 파일을 나열합니다.
  3. 유형
  4. @를 사용하는 것은 죄가 없습니다.

답변4

이에 대한 정보는 거의 없는 것 같습니다. 하지만 이 질문은 내가 어떻게 해야 할지 알아내는 데 여전히 도움이 되었습니다. 그래서 미래의 검색자들을 위해 여기에 프로세스를 게시하겠습니다.

에 따르면:http://acritum.com/winrar/console-rar-manual

RAR command line syntax:
RAR <command>  [ -<switches> ]  <archive>  [ <@listfiles…> ]
[ <files…> ]  [ <path_to_extract\> ]

Listfiles are plain text files that contain names of files to process.
File names should start at the first column. It is possible to
put comments to the listfile after // characters. For example,
you may create backup.lst containing the following strings:

c:\work\doc\*.txt         //backup text documents
c:\work\image\*.bmp       //backup pictures
c:\work\misc

and then run:

rar a backup @backup.lst

If you wish to read file names from stdin (standard input),
specify the empty listfile name (just @).

Win32 console RAR uses OEM (DOS) encoding in list files.

You may specify both usual file names and list files in the same
command line. If neither files nor listfiles are specified,
then *.* is implied and RAR will process all files

따라서 프로세스는 다음과 같습니다.

  1. 보관하려는 위치의 루트 디렉터리로 변경하거나 절대 경로를 사용하세요. 그러나 절대 경로도 아카이브에 저장된다는 점에 유의하세요.
  2. 그런 다음 목록 파일을 만듭니다.

    find topFolderOfTarget -type f | sort > listFile.txt

  3. 그런 다음 @listfile.txt를 사용하여 rar를 실행하십시오.

    rar a archiveName @listFile.txt

또는 목록 파일 생성을 건너뛸 수 있습니다.

find topFolderOfTarget -type f | sort | rar a archiveName @

이것이 나에게 효과적인 이유는 다중 부분 아카이브를 생성하고 백업을 위해 업로드하기 때문입니다. 하나 또는 두 개의 파일이나 폴더만 원하는 경우 관련 부분만 가져오고 전체를 다운로드하지 않아도 됩니다. 콘텐츠가 올바르게 그룹화될 것이라고 확신하세요.

관련 정보