Итак, у меня есть список файлов с номерами, подобными приведенному ниже примеру:
/list/CAP_0045.dat
/list/CAP_0044.dat
/list/CAP_0046.dat
Я хочу переименовать файл файл с наибольшим номером, чтобы добавить к нему префикс. Как мне это сделать?
Для этого можно использовать подстановку команд (прочитайте 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")"