재귀적으로 정렬된 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에 일반 파일이 없으면 "WARNING: No files"가 생성되지만,

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 @

이것이 나에게 유용한 이유는 다중 부분 아카이브를 생성하고 백업을 위해 업로드하고 있었기 때문입니다. 파일이나 폴더 또는 2개만 원하는 경우 관련 부분만 가져오고 전체를 다운로드하지 않아도 됩니다. 내용이 적절하게 그룹화될 것이라고 확신합니다.

관련 정보