mv
Jest to podstawowy wiersz poleceń zaprojektowany, aby zrobić jedną rzecz i zrobić to dobrze (filozofia Uniksa): przenieś plik (i) lub reżyser (y) .
Możesz hakować STDOUT
i STDIN
¹, aby modyfikować w locie ciąg docelowy, ale to nie jest mądry hack
zmień nazwę (Perl's)
Istnieją inne narzędzia o tej samej nazwie, które mogą lub nie mogą tego zrobić, więc bądź ostrożny.
Kiedy ludzie mówią rename
, myślimy o tym, a nie o tym ELF
, mniej potężnym (magia?).
To nie jest podstawowe, to Perl. Możesz przekazać niektóre funkcje Perla w środku, i jest to niezwykle potężne.
Rozważ ten przykład:
Chcesz zmienić nazwę wielu plików takich jak
foobar_1.txt
foobar_2.txt
foobar_3.txt
Możesz dodawać zera do cyfr w sprintf()
następujący sposób (używając regex, heh, to Perl: D):
rename 's/(\d+)/sprintf("%04d", $1)/e' foobar_*.txt
Teraz masz :
foobar_0001.txt
foobar_0002.txt
foobar_0003.txt
To nie jest naprawdę podstawowe polecenie, prawda?
zmiana nazwy nie jest tak naprawdę zaprojektowana do przenoszenia katalogów , ale może to zrobić:
$ mkdir -p /tmp/foo/bar/base
$ touch /tmp/foo/bar/base/file
$ rename 's!/tmp/foo/bar/base/file!/tmp/file!' /tmp/foo/bar/base/file
Przeniesiony plik
/tmp/file
¹ trochę kodu, który widzimy na *.stackexchange.*
stronach internetowych
for FILE in `ls *.txt`
do
mv ${FILE} `echo ${FILE} | sed 's/anything_ugly/anything_still_ugly/'`
done
To nie jest właściwa droga , to zwykły buggy, po prostu, aby wyjaśnić, dlaczego używać właściwego narzędzia we właściwym momencie
type -a rename
arename --version
?