копировать файлы на новое имя – кратчайший путь

В каталоге у меня около 150 файлов с определенным расширением, например:

abc.ext def.ext ghi.ext ... 

Теперь я хочу скопировать все эти файлы также в новое имя файла (без расширения):

  • Самая * надежная * удаленная копия файла?
  • Замените регулярное выражение на строку, содержащую совпадение
  • Показать содержимое многих файлов
  • В настоящее время Tar читает файл 2GB, и я удалил его единственную ссылку. Как остановить его на вечность?
  • Я хочу создать файл под названием «Grocery List» (2 слова в названии этого файла)
  • переименование файлов путем добавления месяца и года, определенных в отметках времени файла
  •  abc def ghi 

    Каков самый короткий способ сделать это? Возможно ли это без написания цикла в файле bash?

    Редактировать: Спасибо за ваши ответы (dirkt, John Newman).
    Увидев ответы, я буду придерживаться более короткого, хотя у него есть петля.

  • Как создать виртуальный файл, связанный с программой, например, в файл `.gz` через` gzip`?
  • Поиск по размеру файла
  • С mv, можно установить временную зависимость от файлов mv'ed?
  • Удалить файлы, более новые, чем X день и час
  • Как удалить «блокировку» из удаленных, но все еще используемых файлов в Linux?
  • Как увеличить количество inodes в файловой системе ext4?
  • 2 Solutions collect form web for “копировать файлы на новое имя – кратчайший путь”

    Это возможно без написания сценария («файл bash»), но не без использования цикла:

     for f in *.ext ; do cp -- "$f" "$(basename "$f" .ext)" ; done 

    basename можно использовать для удаления суффикса.

    Это возможно без цикла. Это хорошо … Я оставлю это до вас.

     $ find . -type f -name "*.ext" -print0 | xargs -0 -I {} echo cp -T {} {}SUB | sed -e 's/\.extSUB//g' 

    добавьте трубу в ш, чтобы выйти из режима сухого хода. Backticks не являются хорошими, поскольку он разделяет новые строки, если вы не имеете дело с $ IFS. Есть и другие проблемы с обратными тактами, как упоминалось выше. Также нужен cp -T, поскольку последний аргумент обычно ожидает каталог.

    Мне не хватает «rep», чтобы прокомментировать сказанное выше, но вы можете использовать различные трюки с bash ${} чтобы избежать fork basename .

    Подстрока: ${f:0:-4} или самое длинное совпадение: ${f%%.ext}

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