Добавление префикса к самым большим числам filename

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

/list/CAP_0045.dat
/list/CAP_0044.dat
/list/CAP_0046.dat

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

0
17.04.2016, 23:41
1 ответ

Для этого можно использовать подстановку команд (прочитайте man sh и поищите).

Если ls /list | tail -n 1 выводит правильный файл, вы можете сделать следующее:

file=$(ls /list | tail -n 1)
mv "/list/$file" "/list/PREFIX$file"

EDIT: Как указал @Wildcard, это может не сработать, если имена файлов содержат новые строки.

Решение, которое должно работать даже с новыми строками в именах файлов, использует find -print0 и {sort,head,tail} -z (похоже, не все версии поддерживают опцию -z/--zero-terminated, GNU поддерживает):

file=$(find /list -print0 | sort -z | tail -n 1 -z)
mv "$file" "$(dirname "$file")/PREFIX$(basename "$file")"
0
28.01.2020, 04:51

Теги

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