У меня есть каталог, который содержит файлы с именами,
00004.time, 00010.time, ...
Нет шаблона кроме формата,
<5 decimal digits>.time
Я хотел бы произвести в файл, просто числа в порядке возрастания. Как я могу сделать это из командной строки или со сценарием?
В оболочке удара можно удалить 'точечное расширение' (самое короткое запаздывающее сопоставление с образцом период, сопровождаемый любым количеством символов) от переменной, которая содержит имя файла с помощью расширения параметра, например, если 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
Таким образом, Вы просто хотите числа и не хотите .time
часть. Мои два цента здесь:
ls /path/to/*.time | cut -d '.' -f1 > toSomeFile.txt
Сделайте то же комбинацией находит и basename
команды следующим образом:
find /path/to/dir -name '*.time' -exec basename {} .time \; > someFile
Эти basename {} .time
, разделяет суффикс ".time" от имен файлов.
Эти {}
представляют текущее найденное имя файла.
В дополнение к ответу 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}