Как удалить файлы из архива

Обновлено: 21.11.2024

У меня есть большой файл foo.tar.xz, содержащий много (скажем, 200 000) файлов. Я выяснил, что этот архив содержит несколько (около 5000) файлов, которые мне не нужны. У меня недостаточно места на диске, чтобы распаковать все это на мой диск; кроме того, я боюсь, что атрибуты/права могут быть потеряны, если я это сделаю. Однако у меня достаточно места для размещения двух копий сжатого архива. Есть ли инструмент для удаления некоторых файлов из архива (указанных регулярным выражением в имени файла) на лету, т.е. без распаковки архива на отдельные файлы?

3 ответа 3

Используйте его, например, так:

Кроме того, операция в любом случае будет довольно медленной из-за (по замыслу) упакованного линейного характера tar-архивов.

Он существует, но не работает с файлами, к которым невозможен произвольный доступ (например, сжатие архивов), но это мой вариант использования.

Другая проблема заключается в том, что я не могу указать шаблон для удаления. Обратите внимание на мой комментарий от 2013 года, в котором я уже упоминал недостатки gtar --delete .

@FUZxxl -T работает с --delete , а --wildcards позволяет использовать шаблоны, а не имена файлов, поэтому создайте временный файл, содержащий шаблоны, и используйте unxz file2.tar.xz . Он не будет выполнять полное регулярное выражение (если вам это нужно, просто используйте tar -t и создайте список имен файлов для удаления), только шаблоны сопоставления имен файлов.

(отредактировано, так как я неправильно понял вопрос, который с тех пор также был отредактирован)

Лучшее, что вы можете сделать, это извлечь, удалить и повторно сжать весь файл.

Невозможно удалить файлы из tar напрямую.

tar — это поток, изначально предназначенный для ленточных накопителей, которые плохо выполняют случайный поиск. Хотя теоретически в дисковой файловой системе можно пробить дыру/переписать оставшийся файл, со сжатием вопрос спорный, как и в большинстве случаев. если не все методы сжатия сильно зависят от содержимого, которое ранее находилось в файле. Чтобы сделать это на месте, вам потребуются очень подробные знания как о методе сжатия, так и о формате файла tar. Это сложность до такой степени, что никто даже не заморачивался с этим. Дешевле просто хранить файлы и игнорировать их.

Версия 2.0 включает в себя нашу самую популярную функцию: поддержку удаления и скрытия ваших фотографий и видео!

Новый заголовок объекта в версии 2.0

  • Нажмите, чтобы поставить лайк текущему объекту.
  • Нажмите, чтобы «заархивировать» или скрыть текущий объект.
  • Нажмите, чтобы «удалить» текущий объект из вашей библиотеки.
  • Нажмите, чтобы «удалить» текущий ресурс из вашей библиотеки и вашей файловой системы.

На небольших экранах эти кнопки доступны через меню объектов (нажмите ⋮ в заголовке):

Новые действия с объектами в версии 2.0

Скрыто из библиотеки Удалено из библиотеки Удалено с диска
Архивировать ✔️
Удалить ✔️
Удалить ✔️ ✔️

Архивируйте фотографии и видео, которые вы хотите скрыть при просмотре своей библиотеки, но при этом хотите иметь возможность просматривать их с помощью поиска и сохранять файлы на диске.

скрыт от эскизов, таких как домашняя страница и результаты поиска.

хранится в вашей библиотеке и на диске.

отображается при поиске «Просмотреть в архиве» (или при любом поиске, включающем термин archived:true )

Чтобы заархивировать объект, щелкните миниатюру и коснитесь или нажмите клавишу Shift A .

Удалите фото и видео, которые не хотите хранить в своей библиотеке и не хотите удалять с диска.

удалены из представлений эскизов, таких как домашняя страница и результаты поиска.

удаляются из вашей библиотеки и сохраняются на диске

фактически не удалены из вашей библиотеки, пока вы не нажмете кнопку "Удалить ресурсы" в поиске "Просмотреть удаленные".

Удалите объект из библиотеки, щелкнув миниатюру и нажав клавишу Shift или клавишу R . На небольших экранах кнопка перемещена из заголовка в меню ⋮.

Удаленные ресурсы и все ранее встречавшиеся варианты этих ресурсов не будут повторно импортированы в вашу библиотеку в будущем.

Удалите фотографии и видео, которые вы хотите удалить из своей библиотеки и с диска.

удалены из представлений эскизов, таких как домашняя страница и результаты поиска.

удалены из вашей библиотеки и удалены с диска

фактически не удаляется из вашей библиотеки или удаляется с диска, пока вы не нажмете кнопку "Очистить корзину" в поиске "Просмотреть корзину".

Удалите ресурс из библиотеки, щелкнув миниатюру и нажав клавишу T или удерживая нажатой клавишу Shift. На небольших экранах кнопка перемещена из заголовка в меню ⋮.

Как и удаленные ресурсы, удаленные ресурсы и все ранее встречавшиеся варианты этих ресурсов не будут повторно импортированы в вашу библиотеку в будущем.

Когда вы нажимаете «Очистить корзину», PhotoStructure удаляет только смонтированные файлы.

Файлы на несмонтированных дисках не удаляются позже.

PhotoStructure старается следовать принципу наименьшего удивления.

Удаляя только все варианты файлов, которые в настоящее время подключены и могут быть удалены, мы избегаем неприятной ситуации, когда через несколько месяцев вы подключаете ранее импортированный том, а PhotoStructure начинает удалять набор вариантов ресурсов в фоновом режиме (которые вы можете так как решил сохранить, и восстановил из бекапа).

Если вы хотите иметь возможность удалять варианты ресурсов на новых томах, которые вы ранее удалили в PhotoStructure, спросите в Discord, и давайте обсудим это!

Удаление и удаление отключены по умолчанию, если вы предоставляете доступ к своей библиотеке локальной сети

PhotoStructure по умолчанию устанавливает для параметров enableRemoveAssets и enableEmptyTrash значение false, чтобы внешние посетители библиотеки не вызывали хаоса.

Эти настройки будут обновлены, когда будет реализован безопасный общий доступ к библиотеке.

Архивация, удаление и удаление могут быть включены или отключены с помощью новых настроек библиотеки enableArchive , enableRemove , enableRemoveAssets , enableDelete и enableEmptyTrash.

(Это проблема! Чтобы решить эту проблему, будет создан безопасный обмен.)

Windows, Linux и macOS поддерживают «обратимое удаление» файлов через «корзину» или «корзину».

По умолчанию PhotoStructure фактически попытается «обратимо удалить» ваши фотографии и видео, а не удалить их навсегда.

Вы можете указать PhotoStructure всегда выполнять принудительное удаление, установив для параметра trySoftDeletes значение false .

Этот параметр по умолчанию имеет значение true во всех выпусках PhotoStructure, кроме Docker, поскольку «обратимое удаление» не имеет смысла в контейнере Docker.

Я пробовал использовать утилиту командной строки WinRAR rar.exe, но она всегда сначала создает архив, а затем удаляет исходный файл после того, как архив уже создан.

В основном я пытаюсь добавить несколько больших файлов в один архив, но мне не хватает свободного места.

Что происходит на самом деле:

  1. Файл 1 добавлен в архив x.rar
  2. Файл2 добавлен в архив x.rar
  3. Файл 3 добавлен в архив x.rar
  4. Файл1 удален
  5. Файл2 удален
  6. Файл 3 удален

Чего я надеюсь достичь:

  1. Файл 1 добавлен в архив x.rar
  2. Файл1 удален
  3. Файл2 добавлен в архив x.rar
  4. Файл2 удален
  5. Файл 3 добавлен в архив x.rar
  6. Файл 3 удален

Есть ли способ сделать это?

Что произойдет, если что-то остановит процесс (например, закончится свободное место на диске) и архив не может быть создан, а файлы уже удалены?

Да, есть способ, но я обязательно прислушаюсь к совету Кена Уайта! стандартный способ самый безопасный. В любом случае, чтобы безопасно (!?) сделать это по-своему, вы можете сделать это в цикле: добавить файл во временный архив, скопировать временный архив в конечное место (перезаписать предыдущий), удалить файл в случае успеха; чтобы в случае чего у вас были уже обработанные файлы в финальном архиве; хотя этот подход будет медленным; единственным преимуществом может быть максимальное количество занимаемого места на диске, зависящее от достижимой степени сжатия, количества файлов.

1 Ответ 1

Приведенный ниже пакетный файл можно использовать для перемещения одного файла за другим из указанной исходной папки в архив RAR.

Но я сомневаюсь, что это действительно поможет вам, если у вас недостаточно места для хранения, чтобы создать файл архива с большими файлами один за другим. Rar.exe должен создать временную копию существующего файла архива при обновлении существующего файла архива с добавлением еще одного файла, что, скорее всего, снова приведет к состоянию нехватки свободного места для хранения.

Удаление файла сразу после его добавления невозможно без запуска двух процессов. Первый процесс запускает Rar.exe как отдельный процесс, но построчно захватывает его выходные данные и удаляет файл, добавленный Rar.exe в архив, в то время как Rar.exe работает как отдельный процесс. Но я думаю, что этого невозможно добиться с помощью пакетного файла.

Я предлагаю Запустить от имени администратора средство очистки диска Windows и использовать его для удаления всех файлов, которые больше не нужны. Очистка Центра обновления Windows, предлагаемая средством очистки диска Windows при запуске от имени администратора, обычно освобождает несколько гигабайт дискового пространства в этом средстве очистки, которое раньше никогда не запускалось. После ручного выполнения необходимой перезагрузки Windows, хотя не отображается, что перезагрузка Windows необходима для завершения очистки Центра обновления Windows, удалите вручную от имени администратора все папки и файлы в папке %SystemRoot%\SoftwareDistribution\Download (обновление безопасности Windows пакеты, уже установленные после перезагрузки Windows и иногда не удаляемые автоматически, как это всегда должно делать Центр обновления Windows) и в папке %SystemRoot%\Temp (папка временных файлов системных процессов), чтобы получить еще больше свободного места для хранения. Пожалуйста, дождитесь перезагрузки Windows, пока снова не отобразится рабочий стол Windows, даже если 100% готовность отображается более часа. Microsoft забыла включить процесс удаления файлов в процентное обозначение и по какой-то неизвестной причине требует очень много времени для удаления тысяч файлов, которые больше не нужны из-за того, что они уже заменены более новыми обновлениями безопасности Windows. Обратите внимание, что никогда ранее не выполнявшаяся очистка Центра обновления Windows может занять несколько часов, особенно в Windows 8/8.1/10, где она всегда занимает гораздо больше времени, чем в Windows 7.

Наконец также очистите файловый кеш(-и) используемого(-ых) интернет-браузера(-ов), чтобы получить больше свободного места для хранения, если свободное место уже закончилось.

Читайте также: