команда для получения имени каталога самого верхнего уровня в сжатых файлах

Взгляните на:

$ man NetworkManager.conf

Кажется этим, если Вы добавляете строку с dns=none в [main] раздел, NetworkManager не затронет /etc/resolv.conf.

4
27.10.2014, 00:42
2 ответа

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

#!/bin/bash

DIR=$(tar tvf ${1} | egrep -o "[^ ]+/$")

if [ $(echo ${DIR} | egrep -o " " | wc -l) -eq 0 ]; then
    echo ${DIR};
else
    echo "ERROR: multiple directories in tarball base"
    exit 1
fi
2
27.01.2020, 20:58

Если вы используете найти... -exec КОМАНДА {} + или найти... -print0 | xargs -0 COMMAND , xargs или find будет создан список аргументов имени файла, не превышающий определенное буферное пространство каждой команды (ограничено ARG _ MAX ). Если пространство буфера исчерпано, каждая команда передает список аргументов имени файла в COMMAND и начинает создание нового списка. Этот процесс будет повторяться столько раз, сколько потребуется, пока не будет больше имен файлов, при этом пункте список создаваемых имен файлов будет передан в COMMAND в последний раз.

Поэтому если вы не ожидаете, что команда find вернет большое количество имен файлов

find . -type f -not -regex '.+?nobackup.*' -exec du -c {} +  

может оказаться достаточной. Если вы и ваш поддержки du - files0-от вы можете использовать, - files0-от =- это, чтобы читать законченный пустым указателем файлы непосредственно от stdin (, du полагает - означать прибывать от stdin)

find . -type f -not -regex '.+?nobackup.*' -print0 | du -c --files0-from=-

Примечание: - files0-от не определен posix, но он должен быть расширен в новом гну du версии. Если реализация была опущена, скорее всего, придется закольцевать результаты найти в некоторых путях и сложить итоговые значения в цикле.

-121--139933-

Для этого лучше использовать awk , чтобы поддерживать арифметические операции

cat $1 | awk -v d=$2 '/BookmarkPageNumber:/{$2-=d}1'
-121--93519-

Update Извините, что забыли, что вам также нужно имя самого верхнего каталога. Я обновил команду, включив «else». Если найден только один каталог, он будет повторять свое имя. Если вызывается «ERROR», можно просто просмотреть содержимое «test.file», чтобы увидеть, какие каталоги находятся в гудроне.

Попробуйте это:

$ zcat test.tar.gz | tar xvf - | \
    awk -F/ '{print $1}' | \
    uniq > test.file && \
    if (($(wc -l 'test.file' | \
    awk '{print $1}')>1));then echo "ERROR";else cat test.file;fi

человек zcat

zcat идентичен gunzip -c. (В некоторых системах zcat может быть установлен как gzcat для сохранения исходной ссылки на сжатие.) zcat распаковывает либо список файлов в командной строке, либо их стандартный ввод и записывает несжатые данные на стандартный вывод. zcat разархивирует файлы с правильным волшебным номером, независимо от того, имеют ли они суффикс .gz или нет.

awk -F/' {print $1} | uniq

Напечатайте первое слово, помеченное символом '/', только уникальное.

> test.file

Запись выходных данных в файл

(($ (wc-l 'test.file' | awk '{print $1}') > 1))

Конструкция double ((..)) допускает арифметическое расширение и оценку. wc -l получает число строк в файле. awk «» {print $1} «») > 1 получить только первый столбец, который является номером счетчика строк, и проверить, больше ли это число чем 1. , затем эхо «ОШИБКА» печать «ОШИБКА», если в tar-файле найдено несколько каталогов.

Надеюсь, что это поможет.

1
27.01.2020, 20:58

Теги

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