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

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

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

  • Перемещение открытого файла на другое устройство
  • Как я могу быть уверен, что каталог или файл действительно удалены?
  • Что происходит, когда несколько процессов пытаются mv одни и те же файлы между двумя различными файловыми системами
  • Как получить последние N файлов в каталоге?
  • Можно ли получить доступ к этим каталогам?
  • Как переименовать имя файла с помощью 'или? в имени файла?
  • Переименование файлов на основе контрольной суммы
  • Является ли чтение файла в UNIX быстрее, чем запись файла?
  • 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

    Альтернатива для «найти» на debian

    Установка того же устройства в режиме «только для чтения», в подкаталоге (/ mnt / rootfs) в виде R / W

    Lm_sensors не читает температуру карты gfx вправо

    Вам нужно установить Java для работы в студии Android?

    Чтение из последовательного интерфейса

    Редактирование isolinux приводит к ошибке паники ядра в Centos Live CD

    Windows Server 2012 R2 и Centos 7 с двойной загрузкой: Windows ушла из меню загрузки

    замена набора персонажей PIPE

    Bash не находит программу, даже если она на моем пути

    grep заботится о расширении .dat?

    Как установка бита Setuid влияет на сценарии оболочки, которые запускаются при загрузке системы, до того, как произошел какой-либо логин?

    Как подсчитать значения, соответствующие определенному условию?

    как отредактировать и покрасить список завершения вкладки bash

    Изменение родительского каталога (../) с символическими ссылками

    Как использовать + в регулярном выражении в sed?

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