Используя bash, я хочу выполнить то, что делает следующая команда, не используя команду ls
, а вместо этого используя чистое расширение пути. Это возможно?
ls * | tail -1
Я ищу что-то вроде
* | tail -1
Используя bash, я хочу выполнить то, что делает следующая команда, не используя команду ls
, а вместо этого используя чистое расширение пути. Это возможно?
ls * | tail -1
Я ищу что-то вроде
* | tail -1
Вы можете передать расширенный список *
в функцию и вывести последний аргумент:
f() { printf "%s\n" "${@: -1}"; }; f *
Да, вы можете использовать do this, но *
делает не то, что вы думаете. Он расширяется до списка содержимого каталога и пытается выполнить себя как двоичный файл. Это может быть опасно, если содержимое вашего каталога содержит фактические исполняемые файлы, которые не предназначены для запуска.
Вы можете использовать встроенную оболочку, не разветвляя отдельный процесс, чтобы что-то сделать с результатом расширения пути. Например, используя printf()
printf '%s\n' *
Посмотрите, что происходит, когда вы просто пытаетесь выполнить *
в командной строке.
mkdir -p foobar
cd foobar
touch zeezee
*
bash: zeezee: command not found
Вы можете tail
результат этого вывода и фильтровать результаты, как вам удобно.
tail
ожидает что-то от stdin, поэтому вам нужна программа (такая какls
), записывающая что-то в stdout, чтобы вы могли передать это вtail
. Эта программа не должна бытьls
; вы также можете написать свой собственный. - person user1934428   schedule 19.02.2020ls * | tail -1
, то есть получить последнее имя файла, соответствующее заданному шаблону. Я создаю список пронумерованных файлов, поэтому после файла 001 я хочу создать файл 002 и т. д. Первый шаг — выяснить, какой самый высокий существующий номер в каталоге - person Roland   schedule 19.02.2020ls
, создайте псевдоним или функцию, чтобы назвать ее простоl
(на один символ меньше). Кстати, вы не обязательно получите последнее имя файла с этим, потому что, если имя файла содержит символ новой строки,ls
разделит его на две строки. Вы безопаснее сначала присваиваете массиву, то естьlsa=(*)
, а затем получаете доступ к последнему элементу массива. - person user1934428   schedule 19.02.2020*
неупорядочен. Результат изls -1
будет упорядочен на основе текущих правил сортировки для ls (которые /могут/ быть неупорядоченными). - person Gem Taylor   schedule 19.02.2020