Если Вы работаете updatedb
каждый раз, когда файл создается..., у Вас будет серьезный ввод-вывод наверху с тех пор updatedb
проанализируйте всю свою систему, ища новые файлы/каталоги. Тем не менее Ubuntu может установить несколько инструментов для индексации пользовательских файлов, решения о том, что использовать, ваше дело:
Большинство из них включено в репозитории Ubuntu по умолчанию и может быть установлено с помощью Центра программного обеспечения.
Это легко делается с помощью SED
:
$ ls /var/log/packages/*SBo | sed -r 's|.*/||; s/-[[:digit:]][[:digit:].]*-.*//'
webcore-fonts
winetricks
wireshark
wxGTK
Объяснение:
-R
Это позволяет расширенные регулярные выражения, которые уменьшают количество необходимых высказаний.
S |. * / ||
Это удаляет каталоги, которые предшествуют имя файла.
S / - [[: цифра:]] [[: цифра:].] * -. * //
Это выглядит номер, окруженный тиреми, и удаляет его и все, что следует. Regex использует [: цифр:]
вместо [0-9]
, чтобы обеспечить, чтобы он работает во всех локалях и с расширенным набором символов.
на Mac OSX, попробуйте:
ls /var/log/packages/*SBo | sed -E -e 's|.*/||' -e 's/-[[:digit:]][[:digit:].]*-.*//'
Вы можете сделать это в оболочке, похожей на бурне таким образом:
for Package in /var/log/packages/*SBo;do
Package="$(basename $Package)"
echo "${Package%%-[0-9]*}"
done
Это использует расширение параметров Чтобы удалить из названия пакета все после первого возникновения -
, а затем цифра, за которой следует все остальное.
И если ваша локаль имеет цифры, не захваченные [0-9]
, [[: цифр:]]
, используемый в Ответ John1024 работает здесь тоже. То есть
for Package in /var/log/packages/*SBo;do
Package="$(basename $Package)"
echo "${Package%%-[[:digit:]]*}"
done
также работает.
Если ваши файлы могут содержать модные символы по именам как пробелы, или просто вы не Как и идея разбивки команды LS
, то вы можете использовать Найти
вместо этого:
find /var/log/packages -maxdepth 1 -name '*SBo' -exec sh -c 'sed s,.*/,,\;s/-[[:digit:]].*//<<<"$0"' {} \;