Вот несколько незначительных улучшений вашего скрипта. Он запрашивает возможные дубликаты и учитывает расширение имени файла:
#!/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
Обычно .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 для распространения.
В GNU вы можете использовать - numeric-owner
, чтобы tar не сохранял ваше имя пользователя. В качестве альтернативы вы можете установить другой идентификатор пользователя с помощью - owner = ID
. При извлечении эти идентификаторы пользователей будут удалены, если экстрактор не является пользователем root.
Обычно для объединения файлов используется cpio
, который обычно используется с параметром - no-preserve-owner
. Так создаются файлы rpm
.
Но tar с идентификаторами пользователей редко является проблемой. Если вы хотите быть параноиком, вы используете специальную учетную запись для окончательного связывания.
Вы ищете что-то вроде tar --owner = 0 --group = 0
, чтобы установить все, что принадлежит корень
/ корень
.
Вы можете обманом заставить tar
обрабатывать файлы так, как будто у них другой владелец, с помощью fakeroot .
Fakeroot запускает команду в среде, где у него есть права root для работы с файлами, путем установки LD_PRELOAD для библиотеки с альтернативными версиями getuid (), stat () и т. Д. Это полезно для разрешения пользователям создавать архивы (tar, ar, .deb .rpm и т. д.) с файлами в них с правами root / владельцем.
Изначально все файлы будут принадлежать пользователю root, но вы можете выбрать
их из оболочки fakeroot
, и последующие команды будут видеть нового владельца.
Любые существующие архивы могут быть очищены с помощью чего-то вроде:
#!/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);
}