Переименование оболочки нескольких файлов

У меня есть несколько файлов в каталоге, например: linux_file1.mp4, linux_file2.mp4 и т.д. Как перенести эти файлы с помощью оболочки, чтобы имена были file1.mp4, file2.mp4 и так далее. У меня около 30 файлов, которые я хочу переместить к новому имени.

Ответ 1

Мне нравится mmv для такого рода вещей

mmv 'linux_*' '#1'

Но вы также можете использовать rename. Имейте в виду, что обычно есть две команды rename с очень разным синтаксисом. Один из них написан на Perl, другой - с использованием linux-linux, поэтому я выделяю их как "perl rename" и "util rename" ниже.

С переименованием Perl:

rename 's/^linux_//' linux_*.mp4

Как правильно указали cweiske.

С утилитой rename:

rename linux_ '' linux_*.mp4

Как вы можете узнать, какое имя вы переименовали? Попробуйте запустить rename -V; если ваша версия использует переименование, она будет печатать номер версии, и если она переименуется perl, она будет безвредна для отчета и неизвестной опции и покажет использование.

Если у вас нет либо rename, либо mmv, и вы не хотите или не можете их установить, вы можете выполнить это с помощью обычного старого кода оболочки:

for file in linux_*.mp4 ; do mv "$file" "${file#linux_}" ; done

Этот синтаксис будет работать с любым POSIX sh, соответствующим XPG4 или более поздней версии, который по сути является всеми оболочками в наши дни.

Ответ 2

$ rename 's/linux_//' linux_*.mp4

Ответ 3

Простой способ сделать это с помощью обхода каталога:

find -type f | xargs -I {} mv {} {}.txt

Переименуйте каждый файл, добавив в конец расширение .txt.

И более общий классный способ с распараллеливанием:

find -name "file*.p" | parallel 'f="{}" ; mv -- {} ${f:0:10}trump${f:4}'

Ответ 4

Мне удалось добиться замены имен файлов в каталогах, объединив ответы @dtrckd и @Sorpigal.

for file in `find -name "linux_*.mp4"`; do mv "$file" "${file/linux_/}" ; done