Mám adresáře se soubory .MP3, u kterých bych chtěl změnit příponu na .mp3. Jaký je nejjednodušší způsob, jak to udělat? Myslím si něco ve smyslu:
find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/1.mp3/ ;
…i když vím, že to není úplně správné. 🙂 Náhrada není správná a nejsem si jistý, jak použít oba mv
a sed
příkaz s -exec
v find
.
Potřeboval bych k tomu bash skript?
Přijatá odpověď:
Zde je jeden způsob, jak to udělat v Bash:
for i in *; do [ "${i/%MP3/mp3}" != "$i" ] && echo "$i" "${i/%MP3/mp3}"; done
Použil jsem echo
zde tedy samotný příkaz nedělá nic jiného než tiskne dvojice názvů souborů. Pokud tento seznam představuje změny, které chcete provést, můžete změnit echo
na něco jako mv -i --
který pak přesune vaše soubory (a vyzve vás před přepsáním).
Stručné vysvětlení:
for
iteruje každý soubor odpovídající *
. Poté určíme, zda je přípona již malá, pokud ano, posouváme dál, pokud ne, pokračujeme v jejím přesunutí (nebo v echo, podle okolností). Používá Bash vestavěné operace s řetězci, o kterých si můžete přečíst zde:http://tldp.org/LDP/abs/html/string-manipulation.html