перемещение строки из имен файлов с помощью sed или переименование их с помощью rename

У меня есть куча видео-файлов в одной папке с двойным суффиксом avi.avi.

find /home/alex/Filme/  -type f -name '*.avi.avi' 
/home/alex/Filme/Super 8.avi.avi
/home/alex/Filme/Exit - A Night From Hell.avi.avi
/home/alex/Filme/Der Plan.avi.avi
/home/alex/Filme/Ich.bin.Nummer.4.2011.avi.avi
snipp

Я пытаюсь удалить двойную строку с помощью следующего «Скрипта»

 #!/bin/bash
    for i in `find $HOME/Filme -type f -name '*avi.avi' -print0` 

    do 
        sed -e 's/'*.avi.avi'/'*.avi'/g'
 done

Или это лучший способ добиться этого с помощью переименования, например этого?

find $HOME/Filme -type f -name '*avi.avi' -print0 -exec  sh -c rename -v 's/*.avi.avi/*.avi/g' {} \;

Я не уверен, что имя папки будет сохранено. Да, я нашел несколько вопросов и ответов по этому поводу, но у меня есть проблемы с их адаптацией к моему случаю.

пример для вопроса

Работает ли один из моих подходов?

0
14.07.2017, 13:41
3 ответа

Вы были почти там.

find $HOME/Filme -type f -name '*avi.avi' -exec \
  sh -c "rename -v 's/\.avi\.avi$/.avi/'" {} \;

(Аргумент renameявляется подстановкой регулярного выражения; и опция /gбудет полезна только в том случае, если вы хотите заменить каждое вхождение в соответствующем имени файла; но по определению в самом конце может быть только одно совпадение.)

Возможно, полезнее будет использовать это пакетно и, возможно, просто использовать mvдля улучшения переносимости.

find $HOME/Filme -type f -name '*avi.avi' -exec \
  sh -c 'for f; do mv -v "$f" "${f%.avi}"; done' _ {} +

Если нет необходимости перемещаться по подкаталогам,

for f in $HOME/Filme/*.avi.avi; do
    mv -v "$f" "${f%.avi}"
done
1
28.01.2020, 04:43

С помощью простойкоманды rename(Perl реализации ):

rename 's/(.*\.avi)\.avi$/$1/' /home/alex/Filme/*.avi.avi

Или просто удалив последнюю секцию .avi:

rename 's/\.avi$//' /home/alex/Filme/*.avi.avi
1
28.01.2020, 04:43

Я использую этот код для переименования таких файлов

rename -v "s/\.avi$//g" *
-2
28.01.2020, 04:43

Теги

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