У меня есть несколько файлов в каталоге, например: 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