Сохранение права собственности на файл с расширением.tgz

Вы можете создать такой скрипт:

#!/bin/bash   
vars=()
i=1
for arg in "$@"; do
    vars+=(-v "var$i=$arg")
    i=$((i+1))
done

awk "${vars[@]}" -f/dev/fd/3 3<< EOF
BEGIN {
    printf "awk var1: %s\n", var1;
    printf "awk var2: %s\n", var2;
}
1
EOF

, а затем запустите его:

$ echo some input |./awk.sh foo bar doo
awk var1: foo
awk var2: bar
some input

Сценарий оболочки создаст командную строку из этих -v var1=...аргументов и передаст их в awk, с фактической программой awk через здесь -документ (, конечно, вы могли бы иметь awk-скрипт вместо этого в отдельный файл ). Тем не менее, вы не можете передавать имена входных файлов таким образом, вы вынуждены читать awk-скрипт со стандартного ввода.

По крайней мере, GNU awk явно документирует, что ARGV[n]также используются в качестве входных файлов (https://www.gnu.org/software/gawk/manual/html_node/ARGC-and-ARGV.html), поэтому вы получаете ошибки «файл не найден».

3
30.07.2020, 13:11
1 ответ

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

Однако, начиная со стандарта POSIX с 1988 года, tarформаты, такие как стандарт Unix tar, формат или pax, также сохраняют имя пользователя и имя группы, поэтому они могут сохранять владение по имени.. Учитывая tar-архив, содержащий файл, принадлежащий uid 1234, с именем пользователя john, tarбудет искать пользователя с именем johnи извлекать файл с этим владельцем, если возможно (, потенциально с uid, отличным от 1234 ), возвращаясь к uid 1234, если такого пользователя нет.

Ничто из этого не идеально, поэтому tarне восстанавливает права собственности, если только он не запущен от имени пользователя root (, за исключением того факта, что для смены владельца в любом случае требуется root ); по умолчанию файлы извлекаются с правом собственности работающего пользователя.

13
18.03.2021, 23:16

Теги

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