Произведите список всех имен файлов в каталоге с последними 5 символами, удаленными от каждого

У меня есть каталог, который содержит файлы с именами,

00004.time, 00010.time, ...

Нет шаблона кроме формата,

<5 decimal digits>.time

Я хотел бы произвести в файл, просто числа в порядке возрастания. Как я могу сделать это из командной строки или со сценарием?

2
задан 2 May 2015 в 01:47

4 ответа

В оболочке удара можно удалить 'точечное расширение' (самое короткое запаздывающее сопоставление с образцом период, сопровождаемый любым количеством символов) от переменной, которая содержит имя файла с помощью расширения параметра, например, если f=00004.time затем ${f%.*} оценивает к 00004.

Помещение этого в цикле по шарику оболочки,

for f in *.time; do printf '%s\n' "${f%.*}"; done

Порядок будет определен шариком (*.time) расширение, и будет порядком сопоставления по умолчанию на Вашу локаль - который должен быть числовым возрастанием для входа, который Вы показываете. Для отправки результатов в файл используйте перенаправление оболочки

for f in *.time; do printf '%s\n' "${f%.*}"; done > somefile

Если Вы действительно хотите удалить последние 5 символов вместо (более общего) точечного расширения, можно изменить это к

for f in *.time; do printf '%s\n' "${f%?????}"; done > somefile
3
ответ дан 2 December 2019 в 01:45

Таким образом, Вы просто хотите числа и не хотите .time часть. Мои два цента здесь:

ls /path/to/*.time | cut -d '.' -f1  > toSomeFile.txt
1
ответ дан 2 December 2019 в 01:45

Сделайте то же комбинацией и basename команды следующим образом:

find /path/to/dir -name '*.time' -exec basename {} .time \; > someFile

Эти basename {} .time, разделяет суффикс ".time" от имен файлов.
Эти {} представляют текущее найденное имя файла.

0
ответ дан 2 December 2019 в 01:45

В дополнение к ответу steeldriver, поскольку подстрока, которая будет исключена, является тем же для всех файлов, можно использовать операцию замены bashрасширение параметра:

for file in *.time; do echo "${file/.time/}"; done | sort -n > file.txt

Это заменит .time с пустой строкой т.е. .time исключен из имен файлов.

Синтаксис для операции замены

${Parameter/OLD/NEW}

Это заменит только первым вхождением OLD с NEW, если Вы хотите все возникновение OLD быть замененным NEW:

${Parameter//OLD/NEW}
2
ответ дан 2 December 2019 в 01:45

Другие вопросы по тегам:

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