Miałem grupę plików, których nazwę chciałbym konsekwentnie zmieniać, pliki mają takie nazwy
"System-Log-01-01-2009-NODATA.txt"
"Something-Log-01-01-2009-NODATA.txt"
I chciałem, aby były małymi, yyyymmdd, rozszerzeniem .log
"system.20090101.log"
"something.20090101.log"
mmv
ale ostatecznie dziękirename
niemu mogę skorzystać z mocy wyrażenia regularnegoperl-rename
.Ponieważ nie mam polecenia zmiany nazwy, polegam na tym:
źródło
mmv to standardowe narzędzie linuksowe do przenoszenia / zmiany nazw wielu plików. Jest dostępny z repozytoriów dla większości dystrybucji. W powyższym przykładzie możesz wykonać:
Aby uzyskać więcej informacji, przeczytaj ten artykuł o debaday lub stronę podręcznika man .
źródło
rename
util nie jest bardzo „standardowy”. Każda dystrybucja jest dostarczana z innymrename
narzędziem. Na przykład tutaj, na Gentoo,rename
pochodzi zsys-apps/util-linux
pakietu i nie obsługuje wyrażeń regularnych.Sugeruje się
mmv
, że Hamish Downer jest przydatny, szczególnie do użytku w skryptach.Z drugiej strony, w ogólnym przypadku, możesz chcieć zmienić nazwy . Ma
qmv
iqcp
polecenia, które otworzą wybrany edytor tekstów (moje preferencje: Vim) i umożliwią edycję tam docelowych nazw plików. Po zapisaniu i zamknięciu edytoraqmv
/qcp
zmieni całą nazwę.Zarówno
mmv
iqmv
jest wystarczająco inteligentny, aby zmienić nazwę plików w odpowiedniej kolejności, a także do wykrywania okrągłe Zmienia nazwę i automatycznie dokonać tymczasowego pliku w razie potrzeby.źródło
sys-apps/rename
pakiet, który da cirenamexm
zmianę nazwy wyrażeń regularnych, a także masowe wielkie / małe litery i inne fajne rzeczy.Aby być uczciwym:
daje ten wynik:
Ale:
rename -n 's/(\w+)-\w+-(\d{2})-(\d{2})-(\d{4})-NODATA\.txt$/$1.$4$3$2\.log/' *.txt && rename 'y/A-Z/a-z/' System.20090101.log
daje właściwą wydajność:
zamieniając przełącznik {-n} na {-v}
źródło
Stworzyłem mały skrypt bash, aby to zrobić:
źródło
ls
danych wyjściowych nie jest najlepszym pomysłem. Losowe wyszukiwanie wyciągnęło ten długi tekst na Unixie. SE dla twojej rozrywki. | Ponadto twoja odpowiedź lepiej pasowałaby do pytania ztr '[:upper:]' '[:lower:]'