Найдите файлы, переименуйте их с помощью «uuidgen» и добавьте расширение

У меня есть список файлов в определенной папке без extenstion. Я хочу переименовать их и добавить расширение. Имя должно быть UUID. Я знаю, как их найти, и есть утилита «uuidgen» для генерации UUID, как я могу сделать все остальное?

find . -type f -name 'file*' # ??? -exec .... ??? 

  • Разница между xattr и chattr
  • необходимо переместить файлы в другую папку на основе даты создания
  • Выберите наиболее подходящее имя файла
  • Установить максимальное количество процессов, начатых incrond
  • Проверьте последний использованный файл .sh.
  • Как определить, является ли цель софт-ссылки каталогом или файлом?
  • Замените номера в файле1 соответствующей строкой в ​​файле2
  • Debian 8.6 - Большой файл в корневой папке с именем EMPTY
  • One Solution collect form web for “Найдите файлы, переименуйте их с помощью «uuidgen» и добавьте расширение”

    Пытаться:

     find . -type f -name 'file*' -execdir sh -c 'mv "$1" "$(uuidgen).ext"' Renamer {} \; 

    Как это работает

    • find . -type f -name 'file*' -execdir ... \;

      Эта часть, с которой вы, похоже, знакомы: находит файлы, имена которых соответствуют file* glob file* и запускает команду ... на них, где в нашем случае ... заменяется на:

    • sh -c 'mv "$1" "$(uuidgen).ext"' Renamer {}

      Это запускает оболочку, запускает команду mv и делает имя файла доступным как $1 . ( Renamer – это произвольная строка, которую оболочка назначает $0 которую оболочка будет использовать, если она генерирует сообщение об ошибке.) Команда find заменяет {} именем имени файла, который он нашел, и это то, что оболочка назначает $1 . Давайте посмотрим на команду оболочки:

    • mv "$1" "$(uuidgen).ext"

      Это переименовывает файл из $1 в имя, созданное uuidgen .

      Поскольку имя файла может содержать пробелы или другие сложные символы, мы помещаем $1 в двойные кавычки, чтобы защитить имя от разделения слов или расширений оболочки.

    Мы использовали -execdir вместо -exec по двум причинам:

    1. Это упрощает команду mv : он не требует дополнительного кода, чтобы убедиться, что переименованный файл остается в одном каталоге.

    2. -execdir более безопасен: если каталог был переименован во время выполнения команды find , -exec , но не -execdir , может -execdir неудача.

    Зачем начинать новую оболочку?

    Может возникнуть соблазн попытаться использовать:

     find . -type f -name 'file*' -execdir mv {} "$(uuidgen).ext" \; # Don't do this 

    Проблема здесь в том, что uuidgen будет запускаться только один раз. Оболочка запускает uuidgen прежде чем он даже начнет команду find . Как следствие, все команды mv будут иметь одинаковое имя целевого файла. Мы хотим, чтобы uuidgen запускался один раз для каждого файла, найденного с помощью find . Вот почему нам нужно запустить mv и uuidgen под командой sh .

    Более эффективная версия

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

     find . -type f -name 'fi*' -execdir sh -c 'for f; do mv "$f" "$(uuidgen).ext"; done' Renamer {} + 
    Interesting Posts

    Есть ли способ попросить udisksctl перечислить все разделы и блокировать устройства?

    Открыты ли файлы процессами, загруженными в ОЗУ?

    Выполнить опцию по умолчанию, если в getopts не указаны параметры

    Настройка eGPU на Deepin 15.2 (на основе Ubuntu)

    bash + с помощью printf для печати в специальном формате

    Почему команда «w» показывает фантом вошедших в систему пользователей?

    Как «git pull» съел мою домашнюю работу?

    Bash: Почему используется eval и shift в скрипте, который анализирует аргументы командной строки?

    Отправка почты из скрипта, который запускается Crontab

    Запустить уведомление-демон в качестве службы

    Простой способ сравнить информацию BIOS между двумя машинами?

    Добавьте пользователя в систему * только в том случае, если он не существует *

    Поддержка WebGL в гостевой системе VirtualBox

    Изменение пути перенаправления при запуске скрипта

    Может кто-нибудь объяснить мне эту хвост + линию?

    Linux и Unix - лучшая ОС в мире.