tar без сохранения пользователя [дубликат]

Вот несколько незначительных улучшений вашего скрипта. Он запрашивает возможные дубликаты и учитывает расширение имени файла:

#!/bin/bash

# for each file
for f in *.{jpg,jpeg}; do
  # generate random id to prevent deletion of duplicates
  randomid=$(tr -dc "[:alnum:]" < /dev/urandom | head -c 10)
  # add modification date and time (divided by dashes) to the current filename
  # -i prompts on possible duplicates. 
  mv -i -- "$f" "$(date +%Y-%m-%d-%R:%S -r "${f}")_location_${randomid}.jpg";
done
12
24.05.2016, 22:30
5 ответов

Обычно .tar.gz - это используемый формат распространения файлов. GNU tar позволяет заменять владельца, группу и разрешения другими значениями при добавлении файлов в архив.

$ tar -c -f archive.tar --owner=0 --group=0 .

https://www.gnu.org/software/tar/manual/html_section/tar_33.html#SEC69

Если ваша версия tar не поддерживает параметры GNU, вы можете скопировать исходные файлы в другое дерево каталогов. и обновите там группу и владельца, прежде чем создавать файл tar.gz для распространения.

24
27.01.2020, 19:54

В GNU вы можете использовать - numeric-owner , чтобы tar не сохранял ваше имя пользователя. В качестве альтернативы вы можете установить другой идентификатор пользователя с помощью - owner = ID . При извлечении эти идентификаторы пользователей будут удалены, если экстрактор не является пользователем root.

Обычно для объединения файлов используется cpio , который обычно используется с параметром - no-preserve-owner . Так создаются файлы rpm .

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

6
27.01.2020, 19:54

Вы ищете что-то вроде tar --owner = 0 --group = 0 , чтобы установить все, что принадлежит корень / корень .

3
27.01.2020, 19:54

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

Fakeroot запускает команду в среде, где у него есть права root для работы с файлами, путем установки LD_PRELOAD для библиотеки с альтернативными версиями getuid (), stat () и т. Д. Это полезно для разрешения пользователям создавать архивы (tar, ar, .deb .rpm и т. д.) с файлами в них с правами root / владельцем.

Изначально все файлы будут принадлежать пользователю root, но вы можете выбрать их из оболочки fakeroot , и последующие команды будут видеть нового владельца.

3
27.01.2020, 19:54

Любые существующие архивы могут быть очищены с помощью чего-то вроде:

#!/usr/bin/env perl
use strict;
use warnings;
use Archive::Tar 1.80;

for my $tarfile (@ARGV) {
    my $tar = Archive::Tar->new($tarfile) // die "failed to read '$tarfile'\n";
    for my $archivefile ($tar->list_files) {
        $tar->chown($archivefile, 'root:root');
    }
    my @compression;
    if ($tarfile =~ m/gz$/) {
        @compression = COMPRESS_GZIP;
    } elsif ($tarfile =~ m/bz$/) {
        @compression = COMPRESS_BZIP;
    }
    $tar->write($tarfile, @compression);
}
3
27.01.2020, 19:54

Теги

Похожие вопросы