2014-11-07 2 views

ответ

0

Вы можете попробовать этот простой Баш скрипт

#!/bin/bash 
for file in *.pdf 
do 
    new_file=$(echo "$file" | sed -r 's/(.*)(\.pdf)/\1.docx\2/') 
    mv $file $new_file 
done 

Выход:

events-number1.index10a.docx.pdf 
events-number1.index10b.docx.pdf 
events-number1.index10c.docx.pdf 
events-number2.index10a.docx.pdf 
events-number2.index10b.docx.pdf 
events-number2.index10c.docx.pdf 

Если вы хотите скопировать файл, используя cp команду вместо mv команды

cp $file $new_file 

Так что ваши существующие файлы не будут меняться.

Объяснение:
Передача все лог-файл для цикла, а затем разделить имя файла ожидаемого результата для использования sed команды и хранится в одной переменных. Затем mv старый файл в новый файл, который означает ваш ожидаемый файл.

+0

Ничего себе, пока я все еще смотрю учебник. возможный ответ готов! – user3096996

+0

Можете ли вы объяснить Wow, пока я все еще смотрю учебник. возможный ответ готов! Не могли бы вы немного объяснить? Я не просто хочу ответа, и это не идеальный результат, а это значит, что я должен работать над этим с вашими объяснениями. Кстати, он не работает на Mac – user3096996

+0

Обе две внутренние линии могут быть объединены в один с помощью методов расширения параметров bash: 'mv '$ {file}" "$ {file # log} main.gmt.log" ' – Jdamian

0

Простая команда rename выполнит эту работу.

rename 's/(?=\.pdf$)/.docx/' *.pdf 
Смежные вопросы