Powiedzmy, że mam katalog z wieloma plikami, takimi jak g.txt, gdzie g.txt został ostatnio zmodyfikowany, powiedzmy, 20 czerwca 2012 r.
Jak mam zmienić nazwę partii wszystkich plików (takich jak g.txt) z dołączoną na końcu datą ostatniej modyfikacji 20 czerwca 2012 r.?
date
implementacja? Mój GNUdate
wydaje się nie obsługiwać danych wejściowych.oto wersja jednowierszowej goldschrafe, która:
radzi sobie także z nazwami plików zaczynającymi się od myślnika
for f in *; do mv -- "$f" "$f-$(date -r "$f" +%Y%m%d)"; done
źródło
date -r "$f" +%Y%m%d
inaczej nie będzie działać, jeśliPOSIXLY_CORRECT
jest w środowisku. Zasadniczo opcje powinny poprzedzać inne argumenty."${f}"
.Obowiązkowy zsh one-liner (nie licząc jednorazowego obciążenia opcjonalnych komponentów):
Używamy
stat
wbudowanegozsh/stat
modułu izmv
funkcji do zmiany nazw plików. A oto dodatek, który umieszcza datę przed rozszerzeniem, jeśli istnieje.źródło
Jak zrozumiałem, nie wiemy z góry, jaka jest data modyfikacji. Musimy więc pobrać go z każdego pliku, sformatować dane wyjściowe i zmienić nazwę każdego pliku w taki sposób, aby zawierał datę modyfikacji w nazwach plików.
Możesz zapisać ten skrypt jako coś takiego jak „modif_date.sh” i uczynić go wykonywalnym. Wywołujemy go z katalogiem docelowym jako argumentem:
modif_date.sh txt_collection
Gdzie „txt_collection” to nazwa katalogu, w którym mamy wszystkie pliki, których nazwę chcemy zmienić.
źródło
stat
narzędzie lub nie mają go wcale.ls
nie jest niezawodne . W niektórych wariantach uniksowych nazwy użytkowników i grup mogą zawierać spacje, co zignoruje wyrównanie kolumn dat.ls
jako data i godzina (a nie data i rok) muszą przypadać w bieżącym roku. To nie jest prawda. To jest w ciągu ostatnich sześciu miesięcy; może to być rok poprzedni (np. od 27 września 2016 r. do 31 grudnia 2016 r. minęło sześć miesięcy). (6) Ryzykując papugowanie Wiki Grega (który już cytował @Gilles), nazwy plików zawierające znaki nowej linii i spacje mogą spowodować, że to się nie powiedzie. … (Ciąg dalszy)Oto wersja jednowierszowego cas (oparta na oneliner goldschrafe) rozbudowana o idempotencję ,
tzn. rozszerzony na pliki prefiksów z datą i czasem i tylko w przypadku tych, którzy nie mają jeszcze prefiksu daty .
Przypadek użycia: pomocny, jeśli dodajesz nowe pliki do katalogu i chcesz dodać prefiks daty do tych, które jeszcze go nie mają.
źródło
for f in *.jpg ; do jhead -ft "$f" ; done
źródło: unix.stackexchange.com/a/290755/9689