Переименуйте набор файлов с шаблоном <имя> .1.gz.html в <имя> .html

Я попытался использовать команду:

mv * .1.gz.html * .html

Но я получил ответ:

<filename > не является каталогом.

Как я могу заставить это работать? Я также попробовал команду переименования, но я тоже не мог работать. Слишком много регулярных выражений для меня.

Я думаю, что использование xargs будет работать, если бы я понял это лучше.

mv либо переименовывает один файл, либо перемещает много файлов в один каталог.

Если вы хотите переименовать много файлов, вы, вероятно, захотите использовать rename .

В зависимости от вашей версии rename вы делаете:

  rename .1.gz.html .html *.1.gz.html 

или

  rename 's/\.1\.gz\.html/\.html/' *.1.gz.html 

Первая версия немного легче записать, вторая – более мощная и иногда доступна как perl-rename . Посмотрите, как man rename чтобы найти правильный синтаксис.

Такой подстановочный шаблон расширяется во все, что соответствует ему, пока команда mv даже не запускается. Хуже всего то, что *.html также будет соответствовать вашим *.1.gz.html файлам.

Это означает, что (например, два файла с именем abc.1.gz.html и def.1.gz.html ) ваша команда, по существу, работает:

mv abc.1.gz.html def.1.gz.html abc.1.gz.html def.1.gz.html

Это попытается переместить abc.1.gz.html и def.1.gz.html в каталог с именем def.1.gz.html . К счастью, это не удается, поскольку этот файл не является каталогом.

Вам нужно будет скриптировать что-то, чтобы посмотреть каждый файл по одному, например:

 for file in *.1.gz.html; do mv "$file" "`echo $file | sed 's/\.gz\.html$/.html/'`" done