W swoim konkretnym przypadku możesz użyć następującego bashpolecenia ( bashjest to domyślna powłoka w systemie macOS):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Uwaga: jeśli istnieje prawdopodobieństwo, że nazwy plików zaczynają się od -, umieść -- je przed nimi [1]:
mv -- "$f" "${f/_*_/_}"
Uwaga: echojest poprzedzonymv tak, aby przeprowadzić próbę. Usuń go, aby dokonać faktycznej zmiany nazwy.
Możesz go uruchomić z linii poleceń lub użyć w skrypcie.
"${f/_*_/_}"jest zastosowaniem bash interpretacji parametrów : (pierwszy) wzorzec dopasowania podłańcucha _*_jest zastępowany literałem_ , skutecznie odcinając środkowy token z nazwy.
- Zauważ, że
_*_jest to wzorzec (wyrażenie wieloznaczne, używane również do globowania), a nie wyrażenie regularne (aby dowiedzieć się o wzorcach, uruchomić man bashi wyszukać Pattern Matching).
Jeśli często zmieniasz nazwy plików, rozważ zainstalowanie specjalistycznego narzędzia, takiego jak renamenarzędzie oparte na Perlu . Na macOS możesz go zainstalować za pomocą popularnego menedżera pakietów Homebrew w następujący sposób:
brew install rename
Oto odpowiednik polecenia u góry rename:
rename -n -e 's/_.*_/_/' *.png
Ponownie, to polecenie wykonuje próbę; usuń, -naby dokonać faktycznej zmiany nazwy.
- Podobnie jak w
bashrozwiązaniu, s/.../.../wykonuje podstawianie tekstu, ale - w przeciwieństwie do in bash- używane są prawdziwe wyrażenia regularne .
[1] Celem argumentu specjalnego --, który jest obsługiwany przez większość narzędzi, jest zasygnalizowanie, że kolejne argumenty powinny być traktowane jako argumenty (wartości), nawet jeśli wyglądają jak opcje, ponieważ zaczynają się od -, jak zauważa Jacob C.