Удалить/удалить строку символов из имен файлов

Удалить/удалить строку символов из имен файлов

У меня есть куча текстовых файлов, которые заканчиваются строкой www.thethinkfoundation.org, например:

file1.www.thethinkfoundation.org.txt
file2.www.thethinkfoundation.org.txt
.
.
.

file100.www.thethinkfoundation.org.txt

Я хочу удалить/удалитьwww.thethinkfoundation.org

Для этого я попробовал выполнить следующую команду в терминале:

for f in www.thethinkfoundation.org*; do mv "$f" "${f#thethinkfoundation.org}"; done

Результат был следующим:

file1..txt
file2..txt
.
.
.

file100..txt

Заранее спасибо за работающее решение.

PS: Я не хочу использовать эту renameкоманду. На самом деле я ищу ту, которая работает в дистрибутивах Linux и *BSD. Мой любимый текстовый редактор — nano.

решение1

Замена подстроки на основеРасширение параметров оболочкии bashнекоторых других оболочках можно добиться двумя способами:

Первый, вы можете заменитьтолько первое появление(слева направо) такого шаблона:

${var/pattern/replacement}

Второй, вы можете заменитьвсе случаипримерно такого образца:

${var//pattern/replacement}

Где var— переменная/параметр, содержащий строку, pattern— шаблон, который вы хотите найти и заменить в этой строке, replacement— замена, patternна которую вы хотите заменить, то, что можно также оставить пустым, т. е. ${var//pattern/}если вы хотите просто удалить этот шаблон из строки.

Таким образом, желаемое вами решение будет выглядеть следующим образом:

for f in *www.thethinkfoundation.org*; do
    echo mv -n -- "$f" "${f//www.thethinkfoundation.org./}"
done

Я добавил его echoдля пробного запуска, чтобы вы могли сначала протестировать его, а затем достать echoи снова запустить, чтобы выполнить настоящую работу.

Связанный контент