Mam pliki o nazwach „12. 2017-04-11 063118.jpg” i „123. 2016-09-05 115236.jpg”. Liczba po lewej stronie „.” liczy się jak indeks od 1 do 1400.
Jak mogę ustawić datę i godzinę utworzenia zgodnie z tym, jak określono w nazwie pliku dla wszystkich 1400 plików, które mam w folderze. Wiem, że polecenie touch -t zmienia datę utworzenia, ale nie wiem, jak wyodrębnić informacje o dacie / godzinie z nazwy pliku i umieścić je w poleceniu, aby było to wykonywane automatycznie dla wszystkich plików.
Wiem z innego wątku, że poniższe powinny działać. ale nie wiem, jak dostosować konwersję tekstu, aby poprawnie zastosować się do mojej konwencji nazewnictwa plików.
for f in *; do
t=$(echo $f | sed -E 's/([A-z]*-)|([ ,;])|(\..*)//g' | sed -E 's/(.*)(..)/\1.\2/')
touch -t $t "$f"
done
Powyższy kod działa, jeśli moja konwencja nazewnictwa plików przypomina „clip-2014-01-31 18; 50; 15.mp4”, jednak mam inny format: „12. 2017-04-11 063118.jpg” i „123. 2016-09-05 115236.jpg”. Czy ktoś wie, jak dostosować sed
polecenie funkcji, aby przetworzyć konwersję do odpowiedniego formatu dla dotyku?
bare *
(Glob) pokaże każdy obiekt systemu plików w katalogu. Czy uważasz, że używanie*.jpg
byłoby lepszym wyborem?something_without_spaces YYYY[.|-|:]MM[.|-|:]DD hhmmSS.someextension
. Nie spowoduje to zmiany daty utworzenia, jeśli wymagany format CCYYMMDDggmm.SS jest nieprawidłowy (np. Zawiera litery lub brakuje kropki).Ponieważ zapytałeś, jak możesz ulepszyć to, co już masz, w pierwszym przypadku zmieniłeś grupy przechwytywania,
sed
aby dopasować nowy wzór, pozostawiając drugi bez zmiansed
. Również podwójnie zacytuj$f
wecho "$f" |
.Należy jednak pamiętać, że już wyeliminowane korzystanie z rurą i drugim wystąpieniu
sed
,| sed ...
poprzez korzystanie z-e
opcji, która dołącza poleceń edycyjnych na listę komend.Tutaj jest dostosowywany jako jedno-liniowy:
Oto objaśnienie grup przechwytywania w pierwszym
sed
poleceniu edycji:Co pozostawia cię,
20160905115236
a gdy jest przetwarzane przez drugiesed
polecenie edycji, staje się,201609051152.36
gdy(.*)(..)
dzieli je na dwie grupy przechwytywania, druga zawiera ostatnie dwa znaki, a pierwsza zawiera wszystko inne..
Zostaje umieszczony w części z powrotem na zmianę o odniesieniami/\1.\2/
zarówno grupy wychwytujące.źródło
Jeśli pliki zawierają znaczniki wyjścia, bezpłatny „exiftool” może zmienić nazwę pliku zgodnie z wartościami w pliku. Zainstalowanie go powoduje również zainstalowanie szczegółowej strony podręcznika man.
http://www.sno.phy.queensu.ca/~phil/exiftool/
Użyłem tego narzędzia nie tylko do zmiany nazw plików, ale także do pisania fragmentów kodu HTML w celu pokazania plików na stronie internetowej.
źródło