#linux #bash #unix #shell
Здравствуйте. Только начал изучить баш и никак не могу придумать решение. Необходимо написать shell script, в который я могу передать некоторое количество файлов, и он выдаст мне самый новый по времени. Комманда ls -t | head -1 вернет мне самый новый файл в директории. Как написать скрипт, который можно было бы выполнить из консоли, передав список файлов (например, список из 2,3,4..9 файлов) [Количество файлов заранее неизвестно], и в результате выполнения которого, будет получен один самый новый по времени файл?
Ответы
Ответ 1
список всех переданных скрипту оций и параметров доступен в переменной $@. при обращении к ней имеет смысл заключать её в кавычки — "$@", для того, чтобы опции/параметры, содержащие пробелы ('пара метр1' пара\ метр2 и т.п.), не разбивались по этим самым пробелам. можно воспользоваться той же программой ls (опция -t сортирует по времени последней модификации файла, причём в обратном порядке — первым в списке будет файл, модифицированный самым последним): #!/bin/bash ls -t "$@" | head -1 а можно пойти более сложным и длинным путём. например, воспользоваться программой stat, которая умеет выводить, к примеру, и время модификации файла (%Y в строке формата вывода, задаваемого опцией -c): #!/bin/bash stat -c '%Y %n' "$@" | sort | tail -1 | cut -d ' ' -f 2-Ответ 2
Находит самый свежий файл и выводит только его имя. ls -t | head -2 | tail -n1 | tr -s " " | cut -d" " -f 9
Комментариев нет:
Отправить комментарий