W swoim konkretnym przypadku możesz użyć następującego bash
polecenia ( bash
jest 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: echo
jest 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 bash
i wyszukać Pattern Matching
).
Jeśli często zmieniasz nazwy plików, rozważ zainstalowanie specjalistycznego narzędzia, takiego jak rename
narzę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ń, -n
aby dokonać faktycznej zmiany nazwy.
- Podobnie jak w
bash
rozwią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.