Выберите имя файла с наибольшим номером

С программой на C

Вы можете, например, использовать поток, который спит для 0.Через 2 секунды

#include
#include
#include
#include
#include

pthread_t tid;

void* doSomeThing() {
    While(1){
         //execute my command
         sleep(0.2)
     } 
}

int main(void)
{
    int i = 0;
    int err;


    err = pthread_create(&(tid), NULL, &doSomeThing, NULL);
    if (err != 0)
        printf("\ncan't create thread :[%s]", strerror(err));
    else
        printf("\n Thread created successfully\n");



    return 0;
}

используйте его, чтобы узнать, как создать поток: создать поток (это ссылка, которую я использовал для вставки этого кода)

7
21.11.2018, 00:39
3 ответа

ls (1) сортирует файлы по имени, так ls | хвост -1 должен делать.

9
29.04.2021, 00:50

Обязательный ответ zsh:

echo "The highest-numbered file is" filename_*.dat([-1])

Это glob с квалификатором glob [NUM] для сохранения только NUM-го совпадения (отрицательное значение отсчитывается от последнего совпадения). Если у вас есть числа разной ширины, добавьте квалификатор n, чтобы

% ls
filename_1.dat filename_12.dat filename_17.dat filename_2.dat filename_8.dat
% echo filename_*.dat([-1])
filename_8.dat
% echo filename_*.dat(n[-1])
filename_17.dat

Globbing происходит только в контексте, который ищет список слов, поэтому если вы хотите присвоить имя файла переменной, вам нужно сделать его массивом, который будет содержать один элемент:

latest=(filename_*.dat[-1])
echo "The highest-numbered file is $latest"

В любой оболочке вы можете установить позиционные аргументы на полный список совпадений и сохранить последнее.

set_latest () {
  eval "latest=\${$#}"
}
set_latest filename_*.dat
echo "The highest-numbered file is $latest"

Имейте в виду, что это возвращает последние в алфавитном порядке, а не в числовом, например, filename_10.dat находится после filename_09.dat, но перед filename_9.dat.

6
29.04.2021, 00:50

Если имена файлов полностью числовые, их нужно сначала передать через sort, так как ls отсортирует файлы в алфавитном порядке, а 10 будет стоять перед 9

$ touch {1..10)
$ ls | tail -1
> 9

$ ls | sort -n | tail -1
> 10
0
29.04.2021, 00:50

Теги

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