У меня есть огромное количество файлов в папке (и подпапках), которые мне нужно переименовать. Например, у меня есть:

movie1.mp4
fixed_movie1.mp4
...

Что мне нужно, это переименовать fixed_movie1.mp4 в movie1.mp4 (перезаписав таким образом исходный файл).

Что у меня так далеко:

TARGET_FILES=$(find /path/to -type f -name=*.mp4)
for f in $TARGET_FILES
do
  <some commands>
done

Я знаю, как использовать sed (не слишком много, я признаю!) но у меня есть проблемы с его использованием, потому что токен fixed_ не всегда находится в начале строки (поиск в подпапках добавляет путь).

Любая помощь будет оценена!

1 ответ1

1

Нет необходимости использовать sed . Bash может сделать расширение параметров:

for f in $TARGET_FILES ; do
    mv $f ${f/fixed_}
done

Если ваши имена файлов содержат пробелы, вы должны быть более осторожными. Создать скрипт для переименования файла

#!/bin/bash
for f in "$@" ; do
    mv "$f" "${f/fixed_}"
done

И беги

find /path/to -type f -name=*.mp4 -exec /path/to/script.sh {} +

Если + не поддерживается в вашей версии find , вы можете удалить цикл из скрипта и переименовать файлы один за другим, используя \; вместо.

(Если ваш find поддерживает параметр -execdir , вы можете использовать его для предотвращения ситуаций, когда сам путь содержит fixed_).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .