Как удалить указанную c строку из имени файла в bash - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть файл с именем «Some Text - Full Score_0.png», и мне нужно удалить из него эту часть «- Full Score» и заменить все оставшиеся пробелы в «Some Text» на «-».

Я могу удалить все пробелы, используя tr ' ' '-'

Мне нужен вывод, чтобы быть "some-text_0.png" ...

У кого-нибудь есть идеи, как решить это?

Ответы [ 3 ]

1 голос
/ 08 февраля 2020

Вы можете использовать расширение параметра:

#!/bin/bash
in='Some Text - Full Score_0.png'
expected='some-text_0.png'

out=${in/ - Full Score}  # Replace
out=${out// /-}          # Replace everywhere
out=${out,,}             # Lowercase all

[[ $expected == $out ]] && echo ok
0 голосов
/ 09 февраля 2020

Есть удобная утилита командной строки, которая называется rename . По умолчанию это происходит в Ubuntu, но также доступно для Ma c.

. Работает как sed(1), но для имен файлов:

$ touch 'Some Text - Full Score_0.png'
$ ls
Some Text - Full Score_0.png
$ rename -e 's/ - Full Score//; s/ /-/g; y/A-Z/a-z/' Some\ Text\ -\ Full\ Score_0.png 
$ ls
some-text_0.png

s/ - Full Score// удаляет текст

s/ /-/g заменяет пробелы дефисами.

y/A-Z/a-z/ строчными буквами все буквы.

0 голосов
/ 08 февраля 2020

Я нашел решение для этого!

"$file" | cut -d- -f1 | sed 's/.$//' | tr ' ' '-'

Если вы найдете другое, лучшее решение, пожалуйста, дайте мне знать.

...