Linux под ключ походит на что-то, что выполняет Ваш список требований. Конкретно Вы захотите смотреть на версии веб-разработки. Существует 2 типа, Платформа и Стек.
Также Вы могли бы хотеть просмотреть список livecdlist.com. Это датировано, но все еще имеет несколько дистрибутивов, перечисленных, которые являются активными и процветающими. Не позволяйте датам отпугнуть Вас, они просто не усовершенствовали их.
Инструмент basename
может снять путь перед именем файла.
find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
-daystart -mtime -1 -exec grep -rl "ERROR" "{}" + | xargs -n 1 basename
выдаст желаемый результат.
-n 1
говорит xargs
, что нужно использовать ровно один аргумент для имени файла. Таким образом, если он получит больше, то породит один процесс basename
на каждый аргумент. Это необходимо, так как basename
принимает в качестве аргумента только одно имя файла.
Эта команда НЕ будет работать, если имена файлов содержат пробелы. В этом случае, как предлагает @HaukeLaging, используйте :
find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
-daystart -mtime -1 -exec grep -rl "ERROR" "{}" + | xargs -n 1 -d \\n basename
Это не сработает, если имена ваших файлов содержат новые строки.
. Если ./gandalf_123.log
вам подходит, то вы можете использовать
find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
-daystart -mtime -1 -execdir grep -rl "ERROR" "{}" +
Иначе я бы пропустил выход grep
, например. sed
, чтобы удалить ненужную часть:
> echo /home/user/logfilesError/gandalf_123.log |
sed 's+.*/++'
gandalf_123.log
можно использовать sed
:
... | sed -e 's=.*/=='
, что позволяет заменить что-либо до /
ничем.
Также можно использовать cut
, но он не может считать справа, поэтому его нужно комбинировать с rev
:
... | rev | cut -d/ -f1 | rev
это можно сделать с помощью
echo ${str##*/}
, которая обрезает строку слева направо до последнего '/'
> str=/home/user/logfilesError/gandalf_123.log
> echo ${str##*/}
gandalf_123.log