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ć?


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ć


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.


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.


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.


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.


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

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)


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.