Nie mogę znaleźć sposobu na wydrukowanie daty pliku. Jak dotąd mogę wydrukować wszystkie pliki w katalogu, ale muszę wydrukować z nim daty.
Wiem, że muszę dołączyć format daty z echem wpisu, ale nie mogę znaleźć prawidłowego formatu.
echo "Please type in the directory you want all the files to be listed"
read directory
for entry in "$directory"/*
do
echo "$entry"
done
Odpowiedzi:
Możesz użyć
stat
poleceniaWięcej informacji
źródło
for entry in "$directory"/* do stat -c%y "$entry" done
Nie działa. Wyświetla statystykę: brakujący operand w terminalustat
?stat -f "%m%t%Sm %N" filename
(zobaczman stat
przykłady, aby uzyskać więcej informacji)stat
polecenie ma inną składnię. Moja sprawa dla FreeBSDstat -f %Sm -t %F" "%R filename
.Czy polecenie „data” nie jest dużo prostsze? Nie ma potrzeby używania awk, stat itp.
Rozważ również przejrzenie strony podręcznika systemowego pod kątem formatowania daty; na przykład ze wspólnym formatem daty i godziny:
źródło
date
tego nie ma. Jego-r
właśnie wykorzystane do zapewnienia znacznik czasu do formatu. Będziesz musiał użyć daty GNU, aby uzyskać tę funkcję.stat -f "%Sm" -t "%m%d%H%M%y" "${1}"
date [-r seconds | filename]
jest w pełni udokumentowany naman
stronie i działa zgodnie z oczekiwaniami.W systemie OS X wolę, aby moja data była w formacie pliku
YYYY-MM-DD HH:MM
wyjściowego.Aby więc określić plik, którego użyłbym:
Jeśli chcę uruchomić go na wielu plikach, mogę zrobić coś takiego:
Ten przykład zostanie wydrukowany, gdy ostatnio uruchomiłem
sudo periodic daily weekly monthly
polecenie, ponieważ odwołuje się do plików dziennika.Aby dodać nazwy plików pod każdą datą, uruchomiłbym zamiast tego następujące:
Wynik byłby następujący:
Niestety nie jestem pewien, jak zapobiec złamaniu wiersza i zachować nazwę pliku na końcu daty bez dodawania kolejnych wierszy do skryptu.
PS - używam,
#!/usr/bin/env bash
ponieważ jestem użytkownikiem Pythona w ciągu dnia ibash
zamiast tego mam różne wersje zainstalowanego w moim systemie#!/bin/bash
źródło
echo -e "$(stat -f %Sm -t %Y%m%d_%H%M%S $AFile)\t$AFile."
. W twoim przypadku może to być:echo -e "$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i")\t$i."
`Najlepsze jest
źródło
Dodając do odpowiedzi @StevePenny, możesz chcieć wyciąć część niezbyt czytelną dla człowieka:
źródło
Chciałem uzyskać datę modyfikacji
YYYYMMDDHHMMSS
pliku w formacie. Oto jak to zrobiłem:Wyjaśnienie. To kombinacja tych poleceń:
źródło
EDYTOWANE: okazuje się, że zapomniałem cudzysłowów potrzebnych
$entry
do poprawnego wydruku i nie podawałem błędu „nie ma takiego pliku lub katalogu”. Dziękuję bardzo za pomoc!Oto mój ostateczny kod:
Wydruki wyglądają następująco:
źródło
W przypadku podziałów wierszy zmodyfikowałem Twój kod, aby uzyskać coś bez podziałów wierszy.
źródło
Jeśli nazwa pliku nie zawiera spacji:
Wydrukuje się w następującym formacie:
Jeśli nazwy plików mają spację (możesz użyć następującego polecenia również dla nazw plików bez spacji, po prostu wygląda to na skomplikowane / brzydkie niż poprzednie):
źródło
<dir>
której nie ma ... kod jest w porządku.Możesz użyć:
Spowoduje to wyświetlenie daty w postaci 2 cyfr.
Jeśli od 1 do 9 , dodaje do niego przedrostek „0” i konwertuje na 01-09.
Mam nadzieję, że to spełnia oczekiwania.
źródło