Для импорта в Excel простой запятой -, разделенной csv
, вы можете использовать что-то вроде
sed -n '/Name = /!d
N;N;N;N
y/\n/,/
s/, *Shareable = [^,]*//
s/[^,=]*= //g;p' yourfile
Первая строка удаляет все строки, кроме Name =
. Продолжайте только для них и добавьте четыре следующие строки в буфер с помощью N
. Команда y
заменяет символы новой строки между строками запятыми-разделителями. Первая команда s
удаляет строку Shareable
, а вторая удаляет часть до =
, оставляя только значение. Это будет работать для любого количества строк. В этом случае текстовые поля будут определяться автоматически без кавычек.
Вы можете попробовать команду su, чтобы запустить распаковку от имени пользователя, которому вы хотите владеть файлами:
su -c "unzip myRootFolder.zip" superman
su позволяет вам выполнить команду от имени другого пользователя или временно стать этим пользователем в рамках текущего сеанса входа в систему. Беги
man su
для полного описания команды.
unzip
не имеет функции делать именно то, что вы описываете.
Когда он спросил тебя
replace myRootFolder/file.TXT? [y]es, [n]o, [A]ll, [N]one, [r]ename:
и вы ответили y
, «заменить» означало, что он удалил исходный файл перед извлечением новой копии. Исходный файл исчез, включая все его метаданные (владельца, разрешения, временные метки ).
Опцией, которая выполняет часть того, что вам нужно, является опция -B
, позволяющая сохранять резервную копию всех перезаписанных файлов. После unzip -B
вы должны увидеть (в выводе ll
/ ls
), что наряду с файлом обновления есть исходный файл с ~
в конце имени :
-rw-r--r-- 1 superman superman 5 21 août 10:18 file.TXT~
-rw-r--r-- 1 root root 5 21 août 10:18 file.TXT
Оттуда,вам необходимо скопировать право собственности на каждый файл резервной копии в новый файл с помощью chown
, а затем удалить файлы резервных копий.
Вы можете сделать это, например.find -exec
:
find myRootFolder -name "*~" -exec bash -c 'bak="{}";
new="${bak%\~}";
chown --reference "$bak" "$new" ; rm "$bak"' \;
, но это вызовет проблемы, если у вас уже были имена файлов, заканчивающиеся на ~
, до того, как были созданы какие-либо резервные копии.
Кроме того, вы можете просмотреть содержимое zip (с помощью команды zipinfo
, входящей в состав Info -ZIP ), и для каждого проверить, существует ли резервная копия, прежде чем выполнять chown
... rm
.
zipinfo -1 myRootFolder.zip | grep -v '$/' | while read new ; do
bak="${new}~"
test -e "$bak" || continue
chown --reference "$bak" "$new"
rm "$bak"
done