Jeśli twoje nazwy plików nie zawierają białych znaków i nie masz żadnych podkatalogów, możesz użyć prostej forpętli:
$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done
W przeciwnym razie użyj wygodnego renamepolecenia (który jest skryptem Perla) - chociaż może nie być dostępne po wyjęciu z pudełka na każdym Uniksie (np. OS X nie jest dostarczany z rename).
@Matteo: Dzięki podpowiedź: zaktualizowałem moją odpowiedź ostrzeżeniem i dwoma przykładami z find.
miku
Również polecam for f in *; do [[ -f ${f} ]] && mv ...; donezłapać tylko pliki ... (bez podkatalogów, linki itp.)
twalberg
1
Jeśli cytujesz zmienne tak, jak powinieneś, to for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; donedziała poprawnie niezależnie od tego, jakie znaki znajdują się w nazwach plików. Przenosi również katalogi, gniazda, dowiązania symboliczne i inne typy plików; Przypuszczam, że to nie ma znaczenia.
Jonathan Leffler
W jakiś sposób dodało to .przed wszystkimi moimi plikami
nullability
75
Wypróbuj renamepolecenie w folderze z plikami :
rename 's/^/Unix_/' *
Argument rename ( polecenie sed ) wskazuje na zastąpienie wyrażenia regularnego ^ przez Unix_ . Daszek (^) to znak specjalny, który oznacza początek wiersza .
to jest niesamowite! sugerowałbym dodanie folderu / *, ponieważ * jest trochę niebezpieczne, jeśli polecenie przypadkowo zostanie powtórzone w innym miejscu
System Rebooter
brew install rename @OliverPearmain
Felipe Plazas
Przykład zamiany przedrostka:rename 's/^start_/run_' *
Uważaj na przetwarzanie danych wyjściowych ls- może to prowadzić do problemów, jeśli w nazwach plików znajdują się spacje lub inne dziwne znaki.
Jonathan Leffler
15
Niedawno spotkałem się z tą samą sytuacją i znalazłem łatwiejsze wbudowane rozwiązanie. Udostępniam to tutaj, aby pomóc innym osobom szukającym rozwiązania.
W systemie OS X Yosemite firma Apple zintegrowała funkcje zmiany nazwy partii bezpośrednio w Finderze. Szczegółowe informacje dostępne są tutaj . Skopiowałem również poniższe kroki,
Zmień nazwę wielu elementów
Wybierz elementy, a następnie kliknij jeden z nich z wciśniętym klawiszem Control.
W menu skrótów wybierz Zmień nazwy elementów.
W wyskakującym menu poniżej opcji Zmień nazwy elementów folderu wybierz zamianę tekstu w nazwach, dodaj tekst do nazw lub zmień format nazwy.
Zastąp tekst: wprowadź tekst, który chcesz usunąć w polu Znajdź, a następnie wprowadź tekst, który chcesz dodać, w polu „Zamień na”.
Dodaj tekst: wprowadź w polu tekst, do którego chcesz dodać, a następnie dodaj tekst przed lub po bieżącej nazwie.
Format: wybierz format nazwy plików, a następnie umieść indeks, licznik lub datę przed lub po nazwie. Wprowadź nazwę w polu Format niestandardowy, a następnie wprowadź numer, od którego chcesz zacząć.
Kliknij Zmień nazwę.
Jeśli masz wspólny wzorzec w swoich plikach, możesz użyć opcji Zamień tekst, w przeciwnym razie Dodaj tekst również załatwi sprawę.
Odpowiedzi:
Jeśli twoje nazwy plików nie zawierają białych znaków i nie masz żadnych podkatalogów, możesz użyć prostej
for
pętli:W przeciwnym razie użyj wygodnego
rename
polecenia (który jest skryptem Perla) - chociaż może nie być dostępne po wyjęciu z pudełka na każdym Uniksie (np. OS X nie jest dostarczany zrename
).Krótkie omówienie na debian-administration.org:
Jeśli twoje nazwy plików zawierają spacje, są łatwiejsze w użyciu
find
, w systemie Linux powinny działać następujące rzeczy :-printf
Niestety w systemach BSD nie ma takiej opcji. Ale GNU findutils powinno dać się zainstalować (np. Na Mac OS X zbrew install findutils
).źródło
find
.for f in *; do [[ -f ${f} ]] && mv ...; done
złapać tylko pliki ... (bez podkatalogów, linki itp.)for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; done
działa poprawnie niezależnie od tego, jakie znaki znajdują się w nazwach plików. Przenosi również katalogi, gniazda, dowiązania symboliczne i inne typy plików; Przypuszczam, że to nie ma znaczenia..
przed wszystkimi moimi plikamiWypróbuj
rename
polecenie w folderze z plikami :Argument rename ( polecenie sed ) wskazuje na zastąpienie wyrażenia regularnego ^ przez Unix_ . Daszek (^) to znak specjalny, który oznacza początek wiersza .
źródło
's/^/.../'
to znaczy?'s/^/.../'
jest argumentem wyrażenia Perla dla polecenia zmiany nazwyrename 's/^start_/run_' *
Myślę, że właśnie tego szukasz:
Tak, jest prosty, ale elegancki i mocny, a także jednoliniowy. Możesz uzyskać ode mnie bardziej szczegółowe wprowadzenie na stronie: Zmień nazwę plików i katalogów (Dodaj prefiks)
źródło
ls
- może to prowadzić do problemów, jeśli w nazwach plików znajdują się spacje lub inne dziwne znaki.Niedawno spotkałem się z tą samą sytuacją i znalazłem łatwiejsze wbudowane rozwiązanie. Udostępniam to tutaj, aby pomóc innym osobom szukającym rozwiązania.
W systemie OS X Yosemite firma Apple zintegrowała funkcje zmiany nazwy partii bezpośrednio w Finderze. Szczegółowe informacje dostępne są tutaj . Skopiowałem również poniższe kroki,
Zmień nazwę wielu elementów
Wybierz elementy, a następnie kliknij jeden z nich z wciśniętym klawiszem Control.
W menu skrótów wybierz Zmień nazwy elementów.
W wyskakującym menu poniżej opcji Zmień nazwy elementów folderu wybierz zamianę tekstu w nazwach, dodaj tekst do nazw lub zmień format nazwy.
Zastąp tekst: wprowadź tekst, który chcesz usunąć w polu Znajdź, a następnie wprowadź tekst, który chcesz dodać, w polu „Zamień na”.
Dodaj tekst: wprowadź w polu tekst, do którego chcesz dodać, a następnie dodaj tekst przed lub po bieżącej nazwie.
Format: wybierz format nazwy plików, a następnie umieść indeks, licznik lub datę przed lub po nazwie. Wprowadź nazwę w polu Format niestandardowy, a następnie wprowadź numer, od którego chcesz zacząć.
Kliknij Zmień nazwę.
Jeśli masz wspólny wzorzec w swoich plikach, możesz użyć opcji Zamień tekst, w przeciwnym razie Dodaj tekst również załatwi sprawę.
źródło
Możesz po prostu użyć
-i
zamiast-I {}
To również działa doskonale.
ls
- wyświetla wszystkie pliki w kataloguxargs
- akceptuje wszystkie pliki wiersz po wierszu dzięki tej-i
opcji{}
jest symbolem zastępczym dla wszystkich plików, niezbędnym, jeślixargs
pobiera więcej niż dwa argumenty jako dane wejścioweKorzystanie z awk:
źródło
-i
jest przestarzały, teraz jest po prostu-I
Działa również dla elementów ze spacjami i ignoruje katalogi
źródło
Z rnm (musisz go zainstalować):
Lub
PS: Jestem autorem tego narzędzia.
źródło
rename
nie działa dla mnie, alernm
działa.Sytuacja:
Mamy w
certificate.key
certificate.crt
środku/user/ssl/
Chcemy zmienić nazwę wszystkiego, co zaczyna się od
certificate
docertificate_OLD
Jesteśmy teraz w środku
/user
Najpierw wykonaj próbę z
-n
:rename -n "s/certificate/certificate_old/" ./ssl/*
Który zwraca:
rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)
Twoje pliki pozostaną niezmienione, to tylko test.
Rozwiązanie:
Kiedy jesteś zadowolony z wyniku testu, uruchom go naprawdę:
rename "s/certificate/certificate_OLD/" ./ssl/*
Co to znaczy:
`rename" s / SOMETHING / SOMETING_ELSE "PATH / FILES
Wskazówka:
Jeśli jesteś już na ścieżce, uruchom ją w ten sposób:
rename "s/certificate/certificate_OLD/" *
Lub jeśli chcesz to zrobić w dowolnym podkatalogu zaczynającym się od
ss
do:rename -n "s/certificat/certificate_old/" ./ss*/*
Możesz też:
rename -n "s/certi*/certificate_old/" ./ss*/*
Który zmienia nazwę wszystkiego, co zaczyna się od,
certi
w dowolnym podkatalogu zaczynającym się odss
.Niebo jest granicą.
Pobaw się z regex i ZAWSZE testuj to PRZED za pomocą
-n
.OBEJRZYJ, ŻE TO NAWET ZMIENI NAZWY FOLDERÓW, KTÓRE PASUJĄ. Lepiej
cd
do katalogu i zrób to tam. UŻYWAJ NA WŁASNE RYZYKO.źródło
find -execdir rename
Spowoduje to zmianę nazw plików i katalogów za pomocą wyrażenia regularnego dotyczącego tylko basenames.
Więc dla prefiksu możesz zrobić:
lub dotyczy tylko plików:
-execdir
najpierwcd
s do katalogu przed wykonaniem tylko na basename.Bardziej szczegółowo wyjaśniłem to pod adresem: Znajdź wiele plików i zmień ich nazwy w systemie Linux
źródło