Mam katalog powiedzieć, /var/tmp/abc
który ma 4 pliki:
12345-ram-3e3r5-io9490-89adu9.csv
45434-dam-qwe35-to9490-43adu9.csv
11234-cam-yy3r5-ro9490-85adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
Chcę zmienić nazwę wszystkich plików CSV (znaleźć wszystkie pliki i zmienić ich nazwę) w najkrótszym możliwym (prawdopodobnie jednopoziomowym) sposobie:
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
rename
. Zakładam, że jest to Larry Wallrename
zrename
pakietu Debiana i pochodnych (i IIRCprename
na systemach perswazji RedHata). Bardzo przydatne narzędzie.perl-rename
w arch linuxverbose
flagi nic nie wyświetla i nie wykonuje zmian nazw plików, mimo że bieżąca ścieżka ma pliki o nazwach podobnych do12345_foo.csv
. Czy muszę wykonać jakieś dodatkowe zadanie, aby działało (obecnie na Fedorze 30)? Jest to czystsze podejście niż zapętlenie. Z góry dziękuję!rename
lubprename
? Zobacz mój komentarz powyżej.man {the command}
wymienia autorów na końcu.rename
polecenie; patrz unix.stackexchange.com/a/238862/135943Próbować:
Jak to działa:
for f in *.csv; do
To uruchamia pętlę nad wszystkimi
*.csv
plikami.mv -i -- "$f" "XXXXX-${f#*-}"
Spowoduje to zmianę nazw plików zgodnie z potrzebami, pytając interaktywnie przed zastąpieniem dowolnego pliku.
done
To oznacza koniec pętli.
Przykład:
źródło
Podobało mi się małe wyzwanie, które wysłałeś, więc oto moje rozwiązanie. Zakładam, że wszystkie twoje pliki zaczynają się od 5 znaków numerycznych, więc użyj polecenia cut, aby zamienić początkowe pliki numeryczne na „XXXXX”.
Poniżej pliki przed poleceniem.
Poniżej jedno polecenie liniowej.
Poniżej pliki po poleceniu.
Czy tego szukasz? :)
Bibliografia:
Zapętlanie danych wyjściowych poleceń w bash
Podciągi w bash
źródło
no need to fork a new process for each
?cut
jest osobnym plikiem binarnym (/usr/bin/cut
), a jego uruchomienie zużywa więcej zasobów niż używanie wbudowanych poleceń powłoki.bez widelców:
Gdy używasz pętli powłoki,
mv
forks raz na plik.rename
Polecenie Perla nie.(Polecenie Perla dotyczące zmiany nazwy ma pewne ograniczenia, ale w tym konkretnym przypadku ograniczenia te nie mają zastosowania.)
Jeśli chodzi o
rename
polecenie pokazane wcześniej, tak, to działa, ale wtedy masz całe zamieszanie między dwoma różnymi rodzajami zmiany nazwy i tak dalej. Jeśli masz odpowiedni, świetnie, ale jeśli nie, to też działa.Jeśli nie masz polecenia perl-rename i nie możesz go zainstalować, możesz po prostu to zrobić:
Jak widać, używa tego samego podstawienia pokazanego w górnej odpowiedzi. Oczywiście, nazwa-perl ma inne dzwonki i gwizdki (wspomniana najlepsza odpowiedź,
-n
już tam jest-0
,-f
itd.), A im więcej ich potrzebujesz, tym więcej powinieneś zainstalować, zamiast wymieniać własne w ten sposób .źródło
rename
polecenia ( najwyższa odpowiedź , również używa Perla), więc może powinieneś dodać nieco więcej wyjaśnień niż po prostu „brak widelców” w odpowiedzi.