У меня есть несколько файлов .xls в определенной директории (скажем, в /A /B). Я хочу переименовать топ-10 последних файлов и добавить «-bkp» в их имена.

Я пытался, не работает

ls -lt *.xls | head -1 | awk '{print "mv " $9 " "$9-bkp}' | sh

Я пытался найти и -exec, но как мы получаем топ 10 последних измененных файлов

1 ответ1

0

Причина, по которой ваш скрипт не работает, заключается в том, что $9-bkp рассматривается как выражение: -bkp также должен быть заключен в кавычки, поэтому строка должна быть:

ls -lt *.xls | head -10 | awk '{print "mv " $9 " "$9"-bkp"}' | sh

Однако это излишне сложно: вы перечисляете много атрибутов файла, а затем используете awk для извлечения имени. Кроме того, вам не нужно запускать подоболочку для выполнения сгенерированных команд. Кроме того, приведенная выше команда не будет работать, если в имени файла есть пробелы.

Следующие адреса относятся ко всем этим пунктам:

ls -t *.xls | head -10 | while read; do mv "$REPLY" "$REPLY-bkp"; done

В этом случае ls -t перечисляет только имена файлов, по одному на строку; read копирует каждую полную строку в REPLY , включая все пробелы, как встроенные, так и начальные или конечные; и команда mv запускается для каждой строки.

Обратите внимание, что более распространенное read name будет копировать строку в name , но без начальных и конечных пробелов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .