Автоматизация переименовать файлы колотит сценарий

У меня есть много документов о моем диске с .odt расширением. Пример: enter image description here

Однако я нахожу .odt недовольным при просматривании большого количества документов.

Так, мне удалось записать этот сценарий (removeODT.sh):

#!/bin/bash

for file in *.odt
do
 mv "$file" "${file%.odt}"
done

Который удаляет .odt расширение из .odt файлов в каталоге, в котором я выполняю сценарий.

например, Откройте терминал в ~/Desktop/MyDocuments и типе

sh /home/user1/BashScripts/removeODT.sh

Это удаляет .odt расширение из всех файлов в MyDocuments.

Но после удаления расширения, я не могу использовать файлы в других операционных системах и также не могу искать содержание документа с loook.

Таким образом для исправления этого я создал второй сценарий для добавления .odt расширения назад при необходимости (addODT.sh):

#!/bin/bash

for file in *
do
 mv "$file" "${file%}.odt"
done

Теперь, то, что я хотел бы сделать, должно заставить те сценарии изменить каждый документ в указанном родительском каталоге и всех его подкаталогах только вместо единственного каталога, как они делают теперь.

например, "Удаляют .odt расширения из файлов в Документах и всех его подпапках"

Это позволило бы мне изменять все свои файлы с единственным сценарием, не имея необходимость выполнять сценарий для каждой папки отдельно. Но я довольно плохо знаком с этим так, я понятия не имею, как пойти об этом.

P.S. Идеальное решение состояло бы в том, чтобы скрыть .odt расширение в Наутилусе, но насколько я знаю, что это не возможно.

2
задан 3 October 2016 в 19:48

1 ответ

Можно использовать find для обхода каталогов рекурсивно.

find -type f -exec mv {} {}.odt \;

Удаление расширения отчасти более проблематично:

find -name '*.odt' -exec bash -c 'f={}; mv "$f" "${f%.odt}"' \;

, Но можно также создать сценарий, чтобы удалить расширение и назвать его от находки для создания этого более простым:

find -name '*.odt' -exec remove_odt.sh {} \;

, Как можно предположить, {}, будет заменен именем каждого файла с exec, финал \; говорит где команда для выполнения концов.

кроме того, не используйте sh для выполнения bash, сценарии, sh и bash являются различными зверями.

7
ответ дан 2 December 2019 в 01:36

Другие вопросы по тегам:

Похожие вопросы: