Jednowarstwowy, który można łatwo pisać bezpośrednio z terminala:
for f in *.md; do mv "$f" "test - $f"; done
Lub przepisane w osobnych wierszach zamiast średników:
for f in *.md
do
mv "$f" "test - $f"
done
Ekspozycja
Składnia for
(w sh
):
for NAME [in WORDS ... ] ; do COMMANDS; done
Tutaj nasi NAME
is f
a nasze WORDS
wszystkie są pliki w bieżącym katalogu dopasowywania *.md
. Tak więc zmienna $f
zostanie podstawiona każdym dopasowaniem pliku *.md
.
Więc dla a.md
:
mv "$f" "test - $f"
staje się
mv "a.md" "test - a.md"
Cytaty są ważne, ponieważ każda nazwa pliku $f
może zawierać spacje. W przeciwnym razie mv
każde słowo byłoby osobnym plikiem. Na przykład, jeśli nie było cudzysłowów, a istnieje plik o nazwie Foo Bar.md
, oznaczałoby to:
mv Foo Bar.md test - Foo Bar.md
co nie działałoby tak, jak zamierzono. Ale zawijanie $f
w cudzysłów ma sens:
mv "Foo Bar.md" "test - Foo Bar.md"
Biorąc pod uwagę składnię for
, możesz również zmienić nazwę podzestawu wszystkich *.md
plików, nadając im jawne nazwy:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Lub używając rozszerzenia powłoki:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done
Jeśli masz
prename
...Używanie zwykłych poleceń powłoki:
źródło
prename
?sudo apt-get install
)?mmv
1 , 2 to także bardzo miłe narzędzie do takiego zadania, byłoby zastosowane do bieżącej pracyOczywiście, jeśli chcesz dodać „test -” do a.md, b.md i c.md, ale nie do a1.md, coś w rodzaju
byłoby bardziej odpowiednie.
Naprawdę mogę to zasugerować, zwłaszcza jeśli masz wiele takich problemów.
Jeśli dodatkowo szukasz interfejsu graficznego, wypróbuj gprename .
źródło
Zamiast używać pętli for, która zawiedzie spacje, chyba że przedefiniujesz zmienną IFS, zaleciłbym użycie pętli while w połączeniu z find. Poniższe będą działać po uruchomieniu z tego samego katalogu co pliki
znajduje się tam wiersz „basename”, więc find wypisze tylko nazwę pliku - bez składników ścieżki, które spowodowałyby przerwanie operacji zmiany nazwy.
źródło
Wiem, że jest naprawdę późno, ale jeśli ktoś szuka czegoś takiego, to zadziałało dla mnie:
źródło
Jeśli masz
zsh
dostępne, możesz użyćzmv
:Możesz przetestować polecenie za pomocą:
-n
oznacza suchobieg, tzn. pokaż tylko, co się stanie.-w
pośrednio umieszcza nawiasy wokół symboli wieloznacznych, sprawia, że odwołania wsteczne działają.źródło
W trybie bash dodawanie „Przygotuj tekst -” do wszystkich plików w folderze:
źródło
for i in *; do mv "$i$" "Prepend text - $i"; done