Intereting Posts
Как удалить определенные символы (но не все) перед одним или несколькими символами? Ограничить список команд по SSH Показать ip на boot – centos 7 Как я могу запретить моей машине Linux передавать свое имя в сети? Есть ли способ автоматически сохранить состояние системы, когда происходит паника ядра? Сценарий Bash: команда ls не найдена Невозможно изменить битрейт по умолчанию для беспроводного сетевого интерфейса Сортировка .csv файла по алфавиту не работает правильно, когда есть дефис У экземпляра Debian два ядра после установки драйверов Intel PCIe SSD – один с черным экраном Выполнить ту же команду несколько раз в фоновом режиме SFK для преобразования текста в звук с помощью мини-диска? Проблема с установкой MEncoder Безопасный способ предоставления прав для самостоятельного пользователя? Iceweasel не правильно загружает загрузки Перепутал файл bash.bashrc, команды больше не работают

Создание рекурсивно отсортированного RAR-архива

По разным причинам я решил использовать RAR-архив для хранения некоторых данных, вместо этого сжатый tar.

Счастлив с решением, кроме одного: я не могу найти способ сортировки файлов. Порядок файлов важен, поскольку я планирую запрашивать архив, и результаты должны быть заказаны.
Моя файловая структура выглядит так:

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@ switch еще. Я использую RAR 4.10 beta 5

Использование rar на Ubuntu

(RAR 3.90 beta 2 Авторское право (c) 1993-2009 Александр Рошаль 3 июня 2009 года)

лучшее, что вы можете сделать, это:

 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 

работает для каталогов.

Рекурсивный переключатель rr -r считывает имена файлов в порядке их появления в структуре dirent (man readdir). Таким образом, единственный способ, которым вы могли бы изменить порядок, который rar упаковывает в файлы, – это управлять порядком файлов в структурах файлов каталогов (обычно порядок создания) перед вызовом rar. Вы можете сделать это с помощью редактора каталогов с предостережением о том, что некоторые типы файловых систем могут изменять порядок файлов в структуре каталогов как часть их сбора мусора или оптимизации.

Вам все равно, как rar «хранит» данные?
Разве unrar v archive.rar |sort даст вам правильно отсортированный список?

У меня была аналогичная проблема, о которой говорилось в Вопросе, и придумал это решение:

 for d in *; do find "${d}/" -type f | sort | rar a "${d}.rar" @; done 
  1. он перечисляет все каталоги (только dirs в этой папке!)
  2. перечислите все файлы в одном из каналов
  3. Сортировать
  4. используйте @ без всякого греха