Zmień wiele nazw plików, zastępując znak

29

Mam wiele plików o nazwach takich jak that : screenshot 13:25.png
Windows, które próbują otworzyć te pliki prawdopodobnie z powodu „:”.

Jak mogę go wymienić?

użytkownik236152
źródło
2
Czy możesz zaakceptować odpowiedź, aby oznaczyć pytanie jako rozwiązane? Pomoże to znacznie innym użytkownikom.
MERose

Odpowiedzi:

52

W terminalu, cdwe właściwym katalogu, a następnie uruchom go.

rename 's/\:/-/g' *.png -vn

Spowoduje to wyświetlenie podglądu zmiany nazwy. Należy wymienić :z -.

Jeśli to wygląda poprawnie, usuń nz końca, a następnie dokona faktycznej zmiany nazwy.

Uwaga : wersje Ubuntu powyżej 17.04 nie są dostarczane rename, ale nadal są dostępne w domyślnych repozytoriach, więc użyj, sudo apt install renameaby je uzyskać

Oli
źródło
Dziękuję za odpowiedź. Próbowałem i mam ten problem: Wzór podstawienia nie został zakończony w (eval 1) wiersz 1.
użytkownik236152
@ user236152 Przepraszam, trochę oszalałem z uciekających ukośników odwrotnych (byłem na autopilocie!). Usunęłam parę i powinna być teraz ważna.
Oli
Być może prosty skrypt Nautilus, który zastępuje wszystkie takie znaki, które mogą powodować problemy na innych platformach (działających na wszystkich wybranych plikach), może być przydatny dla osób „wieloplatformowych”.
Sadi
2
Po co z tego korzystać? Pokazuje, co robi (ułatwia odwrócenie, jeśli popełnisz błąd). Dlaczego w końcu? Wystarczy, że możesz go nłatwo usunąć (lub ).
Oli
1
@nightcrawler Powinieneś być w stanie łączyć całkowicie oddzielne zamienniki:rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Oli
10

Oto czyste rozwiązanie bash:

for i in *:*; do
    mv "$i" "${i//:/_}"
done

${var//pattern/replacement}Format będzie zastąpić wszystkie wystąpienia patternze replacementw zmiennej $var. Aby uzyskać więcej informacji na temat możliwości manipulacji ciągiem bash, zobacz tutaj .

Jeśli chcesz to zrobić dla wielu postaci, możesz po prostu umieścić je w klasie postaci. Tak więc, na przykład, aby wymienić wszystkie ;, :, =, +, %, ,podkreślenia, można zrobić:

$ ls 
1foo:bar  2foo:bar:baz  3foo;bar  4foo=bar  5foo%bar  6foo,bar  7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar  2foo_bar_baz  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar

Zasadniczo chodzi o to, że [ ]to oznacza any of the characters listed. Umieszczając wszystkie postacie, które chcesz zastąpić, w klasie postaci, wszystkie są rozpatrywane jednocześnie.


W przypadku konkretnych znaków, o które prosiłeś, sprawy są nieco bardziej skomplikowane, ponieważ niektóre z nich muszą być poprzedzone znakami ucieczki (ignoruję to, /ponieważ * nix nie zezwala na to w nazwach plików bardziej niż system Windows, więc nie będzie to kwestia):

$ ls
1foo<bar  2foo>bar  3foo:bar  4foo\bar  5foo|bar  6foo*bar  7foo?bar  8foo"bar  9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar  2foo_bar  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar  8foo_bar  9foo_bar

Zauważ, że uciekł \, 'a "przez dodanie \przed siebie.

terdon
źródło
Czy można to poprawić, zastępując kilka pojedynczych znaków (np. Wszystkie te, które nie są akceptowane przez system Windows) innymi?
Sadi
1
@Sadi zobacz zaktualizowaną odpowiedź.
terdon
Zasadniczo jest ich dziewięć: „<>:” / \ | ? * "
Sadi,
@Sadi zobacz zaktualizowaną odpowiedź.
terdon
Dzięki, może to pomóc w stworzeniu skryptu Nautilus, który sprawia, że ​​nazwy wybranych plików są kompatybilne z Windows.
Sadi
2

Jeśli wolisz GUI, zainstaluj pyrenamer:

sudo apt-get install pyrenamer

Następnie uruchom:

pyrenamer

Posiada dziesiątki opcji wzorów i formatów nazw.

Animaletdesequia
źródło
1

Wolę GUI, ale jako rozszerzenie Nautilus, tj. Nautilus Actions Extra :

sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q

(Zobacz www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html )

Następnie, gdy wybierzesz pliki do zmiany nazwy i klikniesz Zmień nazwę z menu kontekstowego, pojawi się wiele opcji zmiany nazw plików.

Sadi
źródło
0

renameutilsOpakowanie posiada wygodny program o nazwie qmv, która zapewnia interaktywny zmiana nazwy partii. Uruchamiasz go w katalogu lub na liście plików, a on generuje tymczasowy plik tekstowy zawierający ich nazwy plików i uruchamia twój ulubiony edytor. Po wyjściu z edytora wszystkie nazwy plików, które zmieniłeś, są odpowiednio zmieniane. qmvzamienia problem zmiany nazwy partii na problem edycji tekstu.

W takim przypadku możesz użyć qmv -f do *:*do edycji nazw wszystkich plików zawierających dwukropek, a następnie :%s/:/_/gpolecenia w Vimie (lub odpowiedniego wyszukiwania i zamień w dowolnym używanym edytorze).

Te -f dozestawy opcji format pliku tekstowego, aby mieć tylko nazwy pliku docelowego, co sprawia, że wyszukiwanie i zamień prostsze. Domyślny format ma dwie kopie nazwy pliku w każdym wierszu, a ty edytujesz tylko drugi. To pozwala zrobić to dobrze, jeśli usunąłeś lub zmieniłeś kolejność wierszy w pliku, ale nie zawsze jest to najłatwiejsze. Istnieją również inne formaty.

Za pomocą qmvmożesz zamiast tego potokować wygenerowany plik za pomocą wybranego polecenia, na przykład sed, jeśli nie chcesz funkcji interaktywnej.

Dan Hulme
źródło
0

A oto Skrypt Nautilusa, który zastępuje (wszystkie?) Znaki niekompatybilne z Windows myślnikiem we wszystkich wybranych nazwach plików (na podstawie odpowiedzi terdona ;-)

#!/bin/bash
filesall=""
while [ $# -gt 0 ]
    do
        files=`echo "$1" | sed 's/ /\?/g'`
        filesall="$files $filesall"
        shift
    done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done
Sadi
źródło
0

Thunar (menedżer plików XFCE) ma przyjemną wbudowaną funkcję do masowej zmiany nazw plików. Posiada opcje usuwania / zamiany znaków, wyszukiwania i zamiany, numerowania plików i wiele innych.

Zainstaluj Thunar:

sudo apt-get install thunar

Otwórz Thunar, przejdź do swoich plików, zaznacz je i wybierz „zmień nazwę” (za pomocą menu kontekstowego lub F2)

użytkownik154126
źródło
0
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit
TekWiz2010
źródło
Działa to dobrze i ma zmienny monit ... Nazwij plik coś w stylu _ Obetnij ostatnie
znaki.cmd
3
Chociaż może to być poprawne, korzysta z języka skryptowego partii Windows. Jesteśmy na AskUbuntu, stronie z pytaniami związanymi z Ubuntu, a zatem narzędzi związanych z Ubuntu. Uważam, że ta odpowiedź niekoniecznie jest tutaj odpowiednia.
Sergiy Kolodyazhnyy
Musiałbyś uruchomić go przez Wine, ale prawdopodobnie można to uruchomić na Ubuntu ... To tylko dziwna odpowiedź, to wszystko.
Oli