której wersji zmiany nazwy używasz? Mój ma różne argumenty:rename from to file...
B Johnson
1
funkcja rename jest zawarta w perlu w wersji 5.10.1.
Kim Stebel
3
Działa to świetnie ze zmianą nazwy zawartą w Ubuntu (i zgaduję, że wszystkie dystrybucje oparte na Debianie), znacznie mniej rozwlekłe niż odpowiedź jm666.
powyższa komenda służy do pracy na sucho , po niej należy usunąć "echo" przed mv
EDYCJA
Niektórzy ludzie sugerują, że tutaj jest potrzebne "Zawijaj argumenty ścieżki w cudzysłów; unika podziału argumentów na ścieżkach ze spacjami" .
Zwykle to zalecenie jest prawdziwe, w tym przypadku nie. Ponieważ tutaj rozszerzenie %zostało zastąpione nie przez rozwinięcie powłoki, ale xargswewnętrznie (bezpośrednio), więc %zostanie poprawnie podstawione, nawet ze spacjami w nazwach plików.
Proste demo:
$ mkdir xargstest
$ cd xargstest
# create two files with spaces in names
$ touch 'a b''c d'
$ find . -type f -print
./c d
./a b
# notice, here are spaces in the above paths#the actual xargs mv WITHOUT quotes
$ find . -type f -print | xargs -I % mv % %.ext
$ find . -type f -print
./a b.ext
./c d.ext
# the result is correct even in case with spaces in the filenames...
W moim przypadku nie byłem świadomy typu pliku, więc użyłem polecenia mv z pomocą polecenia pliku, aby sprawdzić i prawdopodobnie znaleźć typ pliku. To rozwiązanie może nie być idealne dla wszystkich plików, ponieważ polecenie pliku może nie rozpoznawać typu pliku, ale działało w większości dobrze.
for f in *; do ext=$(file $f | awk '{print $2;}'); mv -n "$f""$f.$ext"; done
Użycie awk polega na usunięciu drugiego słowa łańcucha zwróconego z pliku poleceń , który jest w rzeczywistości rozszerzeniem.
Otworzy twój $ EDITOR ze wszystkimi nazwami plików lub domyślnie vim i możesz po prostu podświetlić koniec wszystkich nazw plików używając Ctrl + v + G w vimie, zapisać plik, wyjść i to, wszystkie twoje pliki są przemianowane
mv "${file}" "${file}.jpg"
?Odpowiedzi:
for f in *.jpg; do mv "$f" "${f%.jpg}"; done for f in *; do mv "$f" "$f.jpg"; done
źródło
"${f%.jpg}"
jest operacja na łańcuchach powłoki bash. `$ {string% substring}` Usuwa najkrótsze dopasowanie podciągu $ z tyłu łańcucha $..jpg
nawet zwykłych plików.Możesz użyć zmiany nazwy:
rename 's/(.*)/$1.jpg/' *
źródło
rename from to file...
Inny sposób - bez pętli
find . -type f -not -name "*.*" -print0 |\ xargs -0 file |\ grep 'JPEG image data' |\ sed 's/:.*//' |\ xargs -I % echo mv % %.jpg
Awaria:
powyższa komenda służy do pracy na sucho , po niej należy usunąć "echo" przed mv
EDYCJA Niektórzy ludzie sugerują, że tutaj jest potrzebne "Zawijaj argumenty ścieżki w cudzysłów; unika podziału argumentów na ścieżkach ze spacjami" .
Zwykle to zalecenie jest prawdziwe, w tym przypadku nie. Ponieważ tutaj rozszerzenie
%
zostało zastąpione nie przez rozwinięcie powłoki, alexargs
wewnętrznie (bezpośrednio), więc%
zostanie poprawnie podstawione, nawet ze spacjami w nazwach plików.Proste demo:
$ mkdir xargstest $ cd xargstest # create two files with spaces in names $ touch 'a b' 'c d' $ find . -type f -print ./c d ./a b # notice, here are spaces in the above paths #the actual xargs mv WITHOUT quotes $ find . -type f -print | xargs -I % mv % %.ext $ find . -type f -print ./a b.ext ./c d.ext # the result is correct even in case with spaces in the filenames...
źródło
Po prostu przejdź do katalogu, w którym znajdują się twoje pliki i:
for f in *;do mv $f $f.jpg;done
źródło
for f in *;do mv "$f" "$f".jpg;done
do obsługi spacji w nazwach plików.próba:
faktyczna zmiana nazwy:
źródło
find . | while read FILE; do if [ $(file --mime-type -b "$FILE") == "image/jpeg" ]; then mv "$FILE" "$FILE".jpg; fi; done;
źródło
W moim przypadku nie byłem świadomy typu pliku, więc użyłem polecenia mv z pomocą polecenia pliku, aby sprawdzić i prawdopodobnie znaleźć typ pliku. To rozwiązanie może nie być idealne dla wszystkich plików, ponieważ polecenie pliku może nie rozpoznawać typu pliku, ale działało w większości dobrze.
for f in *; do ext=$(file $f | awk '{print $2;}'); mv -n "$f" "$f.$ext"; done
Użycie awk polega na usunięciu drugiego słowa łańcucha zwróconego z pliku poleceń , który jest w rzeczywistości rozszerzeniem.
źródło
rename --dry-run * -a ".jpg" # test * -a ".jpg" # rename
źródło
--dry-run
i-a
nie są dostępne w mojej wersjirename
. Jeśli jest to specyficzne dla jakiejś architektury, należy to określić.Możesz użyć przenoszenia wielu plików . Jestem opiekunem tego projektu. Składnia jest prosta.
Otworzy twój $ EDITOR ze wszystkimi nazwami plików lub domyślnie vim i możesz po prostu podświetlić koniec wszystkich nazw plików używając Ctrl + v + G w vimie, zapisać plik, wyjść i to, wszystkie twoje pliki są przemianowane
źródło
Ryan Li
Prawidłowa składnia dodawania rozszerzenia pliku do wielu plików w katalogu, które nie mają rozszerzenia, to
find . | while read FILE; do if [[ -n `file --mime-type "$FILE" | grep 'message/rfc822'` ]]; then mv "$FILE" "$FILE".eml; fi; done;
źródło