Как получить последнюю папку (отсортированную в алфавитном порядке по убыванию и соответствующую шаблону) с помощью ls / find / etc?

Модульный тест в каталоге источников ускорения

pushd tools / build / test; python test_all.py; popd

Регрессионный тест

статус pushd; b2 --toolset = intel; popd

http://www.linuxfromscratch.org/blfs/view/svn/general/boost.html

2
23.07.2016, 18:19
3 ответа

Чтобы заставить ls отображать имя папки вместо перечисления ее содержимого, используйте аргумент -d , например:

ls -ld ~
3
27.01.2020, 21:56

Без ls , в bash или другой оболочке с массивами (это должно работать даже с именами, в которых есть забавные символы):

$ names=( my.parent/my.folder* ); echo ${names[-1]}
my.parent/my.folder2

Без массивов (не так устойчив к забавным персонажам, но сохраняет вилку ls ):

$ printf "%s\n" my.parent/my.folder*  | tail -1
my.parent/my.folder2
2
27.01.2020, 21:56

Не разбирайте вывод ls.

Оболочка расширяет /my.parent/my.folder* до списка подкаталогов /my.parent, имя которых начинается с my.folder в алфавитном порядке. Вызов ls не делает ничего полезного.

Чтобы выбрать последний элемент списка, если в вашей оболочке есть массивы, поместите список в массив и выберите последний элемент.

directories=(/my.parent/my.folder*)
last_directory="${directories[${#directories}-1]}"

Если в вашей оболочке нет массивов, вы можете сделать это через позиционные параметры.

set -- /my.parent/my.folder*
eval "last_directory=\${$#}"

Это перезаписывает текущие позиционные параметры. Чтобы избежать этого, используйте функцию.

set_to_last () {
  eval "$1=\${$#}"
}
set_to_last last_directory /my.parent/my.folder*

Обратите внимание, что весь код в этом ответе предполагает, что есть хотя бы одно совпадение.

0
27.01.2020, 21:56

Теги

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