Сортировать список каталогов в обратном порядке

Не совсем понятно, но "убить" не застревает, так что,

while read pid; do kill "$pid"; done < "/scripts/pid_$DATE.txt"

или добавьте -9, чтобы убить, чтобы принудительно убить ваш процесс

0
21.04.2021, 06:44
2 ответа

Вы пытаетесь выполнить сортировку, используя всю строку в качестве ключа.

Имена объектов записываются в 9-й столбец, поэтому необходимо использовать:

ls -l /usr/bin/ | sort -k9 -r
0
28.04.2021, 22:51

Пусть lsвыполнит сортировку:

ls -l -r /usr/bin

или просто

ls -lr /usr/bin

Стандартная опция -rдля lsзаставляет сортировать список в обратном порядке. Если вы попросите lsвыполнить сортировку по отметке времени модификации с помощью -t, -rтакже изменит порядок этого списка и т. д.

Конвейер команд выполняет сортировку по разрешениям, владельцам и т. д., которые выводятся ls -l, и не будет учитывать имена файлов, если вся остальная информация для двух записей не будет идентичной.


Вы не спрашивали об этом, но, поскольку это обычное дело, и часто это следующий шаг после вопроса lsо порядке вывода... не используйте ls, вместо этого используйте массив или позиционные параметры:

Имя первого файла:

names=(/usr/bin/*)
printf '%s\n' "${names[0]}"

или

set -- /usr/bin/*
printf '%s\n' "$1"

Последнее имя файла:

names=(/usr/bin/*)
printf '%s\n' "${names[-1]}"

или

set -- /usr/bin/*
shift "$(( $# - 1 ))"
printf '%s\n' "$1"

Аналогичным образом, лучший способ получить последний измененный файл (или каталог )в bash— выполнить

set -- /usr/bin/*
newest=$1; shift
for pathname do
    [ "$pathname" -nt "$newest" ] && newest=$pathname
done

printf 'Newest: %s\n' "$newest"

Измените тест -ntна -ot, чтобы получить самый старый (наименее измененный )файл.

2
28.04.2021, 22:51

Теги

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