Mam folder z serią plików o nazwie:
prefix_1234_567.png
prefix_abcd_efg.png
Chciałbym zbiorczo usunąć jeden podkreślenie i środkową zawartość, aby wynik wyglądał następująco:
prefix_567.png
prefix_efg.png
Odpowiednie, ale nie do końca wyjaśniające:
_*_
spacją.Odpowiedzi:
W swoim konkretnym przypadku możesz użyć następującego
bash
polecenia (bash
jest to domyślna powłoka w systemie macOS):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 zastosowaniembash
interpretacji parametrów : (pierwszy) wzorzec dopasowania podłańcucha_*_
jest zastępowany literałem_
, skutecznie odcinając środkowy token z nazwy._*_
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:Oto odpowiednik polecenia u góry
rename
:Ponownie, to polecenie wykonuje próbę; usuń,
-n
aby dokonać faktycznej zmiany nazwy.bash
rozwiązaniu,s/.../.../
wykonuje podstawianie tekstu, ale - w przeciwieństwie do inbash
- 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.źródło
.*
->$1
), np. Zmień nazwęFoo bar S01E01 biz baz.ext
naS01E01.ext
:rename -n -e 's/.*(S[0-9]{2}E[0-9]{2}).*(\.[a-z]{2,4})/$1$2/' *
echo
do suchych biegów. Dzięki za wskazówkę!brew install rename
Aby zmienić nazwy plików, możesz użyć
rename
narzędzia:brew install rename
Na przykład, aby zmienić ciąg wyszukiwania we wszystkich nazwach plików w bieżącym katalogu:
Usuń parametr „n”, aby zastosować zmiany.
Więcej informacji:
man rename
źródło
OS X
wersjeGNU bash
( x86_64-apple-darwin ) nie zawierają narzędzia zmiany nazwy.brew install rename
rename -vs GLYCOPHORIN GLYCC *
i teraz automatycznie zmienia nazwę 450+ plików. I super szybko.Możesz użyć sed:
wynik:
* aby najpierw wykonać pracę na sucho, wymień
mv
na końcuecho
Wyjaśnienie:
źródło
ls * | xargs -I % bash -c 'echo mv "%" "$(sed 's@_.*_@_@' <<<"%")"'
(usuń,echo
aby faktycznie zmienić nazwę).Miałem pakiet plików, który wyglądał tak: be90-01.png i potrzebowałem zmienić myślnik na podkreślenie. Użyłem tego, co działało dobrze:
źródło
możesz zainstalować
rename
polecenie za pomocąbrew
. po prostu zróbbrew install rename
i użyj go.źródło
Za pomocą
mmv
źródło
sudo apt-get install mmv
.brew install mmv
.Spróbuj tego
Oto inny sposób:
źródło