- Extracting version number from a filename
- 4 Answers 4
- Как узнать версию программы в Linux
- Поиск в Linux с помощью команды find
- Общий синтаксис
- Описание опций
- Примеры использования find
- Поиск файла по имени
- Поиск по дате
- По типу
- Поиск по правам доступа
- Поиск файла по содержимому
- С сортировкой по дате модификации
- Лимит на количество выводимых результатов
- Поиск с действием (exec)
- Чистка по расписанию
- Thread: How can we get file version information in Linux?
- How can we get file version information in Linux?
- Re: How can we get file version information in Linux?
Extracting version number from a filename
where XXX.XX is a version number and I need the version number only. How to do it in linux? I have this code:
#!/bin/bash current_ver=$(find /mnt/builds/current -name '*.run'|awk -F/ '')
So this gives me just the name of the file correctly (minus the location, which I don’t want). But how do I only get the XXX.XX version number into a variable such as $version
4 Answers 4
You actually don’t need any external tools. You can do this entirely within bash, by chopping variables according to patterns..
[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run" [ghoti@pc ~]$ vers=$; echo $vers x86_64-XXX.XX-diagnostic.run [ghoti@pc ~]$ vers=$; echo $vers XXX.XX-diagnostic.run [ghoti@pc ~]$ vers=$; echo $vers XXX.XX [ghoti@pc ~]$
Or if you prefer, you can chop off pieces right-hand-side first:
[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run" [ghoti@pc ~]$ vers=$; echo $vers installer-x86_64-XXX.XX [ghoti@pc ~]$ vers=$; echo $vers XXX.XX [ghoti@pc ~]$
Of course, if you want to use external tools, that’s fine too.
[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run" [ghoti@pc ~]$ vers=$(awk -F- '' <<<"$name") [ghoti@pc ~]$ echo $vers XXX.XX [ghoti@pc ~]$ vers=$(sed -ne 's/-[^-]*$//;s/.*-//;p' <<<"$name") [ghoti@pc ~]$ echo $vers XXX.XX [ghoti@pc ~]$ vers=$(cut -d- -f3 <<<"$name") [ghoti@pc ~]$ echo $vers XXX.XX [ghoti@pc ~]$
Как узнать версию программы в Linux
sed (GNU sed) 4.7 Packaged by Debian Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Jay Fenlason, Tom Lord, Ken Pizzini, Paolo Bonzini, Jim Meyering, and Assaf Gordon. GNU sed home page: . General help using GNU software: . E-mail bug reports to: .
В Debian , Ubuntu и других производных Debian можно выполнить команду
Например, чтобы узнать версию sed нужно выполнить
Package: sed Essential: yes Priority: required Section: utils Installed-Size: 336 Origin: Ubuntu Maintainer: Ubuntu Developers Bugs: https://bugs.launchpad.net/ubuntu/+filebug Architecture: amd64 Multi-Arch: foreign Version: 4.7-1 Pre-Depends: libacl1 (>= 2.2.51-8), libc6 (>= 2.14), libselinux1 (>= 1.32) Filename: pool/main/s/sed/sed_4.7-1_amd64.deb Size: 189668 MD5sum: 2e2c9a0370c20a2a1921572f250db43e Description: GNU stream editor for filtering/transforming text Original-Maintainer: Clint Adams SHA1: a8106de20fa00fc7f97a45d18ec411512cc64293 SHA256: a5428ddec609149eb6086cec20bf14a0300972a191eb0cc010e7f1c7f17186f4 Homepage: https://www.gnu.org/software/sed/ Task: minimal Description-md5: 2ed71305ee7a49ce4438c58140980d2f
Команда dpkg -p, впрочем как и флаги --version, -V работает не со всеми программами
Например, если вы выполните
Скорее всего получите сообщение
dpkg-query: package 'virtualbox' is not available
Команда virtualbox --version просто запустит Virtualbox
Чтобы определить версию Virtualbox выполните
Oracle VM VirtualBox VM Selector v6.1.10_Ubuntu (C) 2005-2020 Oracle Corporation All rights reserved. No special options. If you are looking for --startvm and related options, you need to use VirtualBoxVM.
- Поиск по сайту
- aofeed - Telegram канал чтобы следить за выходом новых статей
- aofeedchat - задать вопрос в Телеграм-группе
Поиск в Linux с помощью команды find
Обновлено: 01.02.2022 Опубликовано: 25.07.2016
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Общий синтаксис
— путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.». — набор правил, по которым выполнять поиск. * по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Также доступны логические операторы:
Оператор | Описание |
---|---|
-a | Логическое И. Объединяем несколько критериев поиска. |
-o | Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска. |
-not или ! | Логическое НЕ. Инвертирует критерий поиска. |
Полный набор актуальных опций можно получить командой man find.
Примеры использования find
Поиск файла по имени
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.
2. Поиск файла по части имени:
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
find . -name "sess_*" -a -name "*cd"
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
find . -name "sess_*" -o -name "*cd"
в) Более компактный вид имеют регулярные выражения, например:
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
4. Найти все файлы, кроме .log:
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
* данная команда найдет файлы, которые менялись более 60 дней назад.
find . -mmin -20 -mmin +10 -type f
* найти все файлы, которые менялись более 10 минут, но не более 20-и.
2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find --version).
find . -type f -newermt "2019-11-02 00:00"
* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.
find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02
* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).
find . -type f -newerat 2019-10-08
* все файлы, к которым обращались с 08.10.2019.
find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01
* все файлы, к которым обращались в октябре.
find . -type f -newerct 2019-09-07
* все файлы, созданные с 07 сентября 2019 года.
find . -type f -newerct 2019-09-07 ! -newerct "2019-09-09 07:50:00"
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
По типу
Искать в текущей директории и всех ее подпапках только файлы:
* f — искать только файлы.
Поиск по правам доступа
1. Ищем все справами на чтение и запись:
2. Находим файлы, доступ к которым имеет только владелец:
Поиск файла по содержимому
find / -type f -exec grep -i -H "content" <> \;
* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.
С сортировкой по дате модификации
find /data -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
find /data -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -n 1
Поиск с действием (exec)
1. Найти только файлы, которые начинаются на sess_ и удалить их:
find . -name "sess_*" -type f -print -exec rm <> \;
* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.
2. Переименовать найденные файлы:
find . -name "sess_*" -type f -exec mv <> new_name \;
find . -name "sess_*" -type f | xargs -I '<>' mv <> new_name
3. Переместить найденные файлы:
find . -name "sess_*" -type f -exec mv <> /new/path/ \;
* в данном примере мы переместим все найденные файлы в каталог /new/path/.
4. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
find /home/user/* -type d -exec chmod 2700 <> \;
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
6. Передать найденные файлы конвееру (pipe):
find /etc -name '*.conf' -follow -type f -exec cat <> \; | grep 'test'
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
7. Произвести замену в файлах с помощью команды sed:
find /opt/project -type f -exec sed -i -e "s/test/production/g" <> \;
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
Чистка по расписанию
Команду find удобно использовать для автоматического удаления устаревших файлов.
Открываем на редактирование задания cron:
0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;
* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.
Thread: How can we get file version information in Linux?
Novice
Join Date Feb 2010 Posts 31 Qt products Platforms
How can we get file version information in Linux?
I am porting one Qt appllication from windows to linux which is using Win32 functions like GetFileVersionInfoSize(),GetFileVersionInfo() and VerQueryValue() for getting file version information.
is there any equivalent functions in linux to get file version information?
I came to know that we are getting version info from version.dll in Windows. is it possible to make use use of that dll by installing Winelib in Linux?
Plz provide me some answers.
Wiseguy
Join Date Jan 2006 Location Munich, Germany Posts 4,714 Thanks 21 Thanked 418 Times in 411 Posts Qt products Platforms
Re: How can we get file version information in Linux?
I don't know for sure, but I don't think the linux file systems have such a thing as savaing file version info in them.
The way I know is by naming the libs with their corresponding version numbers.
If I am correct, then you better just put the code associated with these function under #ifdef WIN32.
Another way could be to override these function to retrieve the version number from the lib file name.
Do you write clean code? - if you are TDD'ing then maybe, if not, your not writing clean code.