Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam,
Wie ktoś może czym najszybciej w bashu wylistuje wszystkie nowo utworzone pliki
z ostatnich 3 godzin?
Mam np katalog - /home/user/wazne
co jakiś czas dodawane są tam nowe pliki i katalogi.
Zastanawiam się czym wylistować nowo dodane ale z ostatnich 3 godzin.
Pozdrawiam :)
Offline
Użyj find, on tam ma:
-newermt (dokładna data)
-atime , -ctime , -mtime (dni)
-ammin , -cmin , -mmin (minuty)
Jak chcesz sobie odszukać pliki modyfikowane 3 dni wstecz:
$ find ./ -mtime -3
Jak chcesz pliki modyfikowane 10min wstecz to:
$ find ./ -mmin -10
Offline
no tak...to się odnosi do modyfikacji.... a co jeśli chodzi o pliki które zostały dodane? ( nie modyfikowane )
Offline
Offline
hmmm...no właśnie to rozgryzam...ale widze że niezły kosmos...
korzystał ktoś może z tego?
Offline
To istotnie ciekawe, że czas utworzenia nie jest zapisywany przez system operacyjny.
Dla jasności. Pobierana informacja pochodzi z czasu utworzenia węzła (inode) w systemie plików.
Widzę, że trzeba będzie jakąś funkcje napisać, żeby to móc zastosować jakoś praktycznie.
Tutaj lepszy link http://tecadmin.net/file-creation-time-linux/
Offline
wylistuje wszystkie nowo utworzone pliki
Jest jeszcze jeden problem. Plik musi być faktycznie nowo utworzony... Nie może być np. skopiowany, bo wtedy nie tworzy się nowy inode.
Offline
morfik napisał(-a):
A "touch dupa" to co to jest? xD
Poczytaj o touch przyjacielu.
Skutkiem ubocznym touch jest tworzenie nowego pustego pliku. Ta komenda robi coś innego.
Offline
Parametry cmin i mmin nie wyszukują nowo utworzonych plików.
Polecam skorzystać ze stat...
stat dupa
Offline
$ stat dupa File: 'dupa' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fe02h/65026d Inode: 131967 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ morfik) Gid: ( 1000/ morfik) Access: 2016-06-07 14:48:11.769030013 +0200 Modify: 2016-06-07 14:48:11.769030013 +0200 Change: 2016-06-07 14:48:11.769030013 +0200 Birth: -
I co mam tu zobaczyć? Nowe pliki nie maja daty modyfikacji czy coś?
Offline
morfik napisał(-a):
Kod:
Birth: -I co mam tu zobaczyć? Nowe pliki nie maja daty modyfikacji czy coś?
Data modyfikacji nie jest tożsama z datą utworzenia.
Wcześniej pisałem, że utworzenie inode'a wskazuje na faktyczny moment utworzenia pliku w systemie plików.
Offline
Jednak wpadłem na pomysł, że będę listował katalogi wrzucając wynik do pliku :
for i in /root/katalog1/*; do echo $i; done > plik1.txt
po 3 godzinach
for i in /root/katalog1/*; do echo $i; done > plik2.txt
a następnie sprawdzał diff'em
diff plik1.txt plik2.txt
w tedy dostanę pliki które zostały dodane.
jednak diff wyrzuca mi coś takiego:
7a8 > /root/katalog1/nowy_plik.txt
a chciałbym samą ścieżkę czyli:
/root/katalog1/nowy_plik.txt
Poza tym zastanawiam się nad tym for'em...
dlatego że w katalogu /root/katalog1/
są jeszcze podkatalogi i w podkatalogach kolejne
...w sensie, że drzewo jest dość obszerne...
a wrzucając wynik do pliku chciałbym aby wrzucał cała strukturę ( wszystkie podkatalogi i pliki itd itd )
żeby je porównywał.
Offline
A takie coś?
get_crtime() { for target in "${@}"; do inode=$(stat -c %i "${target}") fs=$(df --output=source "${target}" | tail -1) crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*') printf "%s\t%s\n" "${target}" "${crtime}" done }
To wypisze wynik w takiej postaci:
# get_crtime * | sort -k 5 dupa Tue Jun 7 15:21:30 2016 dupa2 Tue Jun 7 15:21:38 2016 dupa3 Tue Jun 7 15:21:40 2016 dupa4 Tue Jun 7 15:21:40 2016 dupa5 Tue Jun 7 15:21:41 2016 dupa1 Tue Jun 7 15:21:43 2016
Jest posortowane po 5 kolumnie, jako, że tylko 3h, to z tego można wyciągnąć. Pewnie by jeszcze coś dało się dopisać by porównał ten czas z 3h wstecz i wyświetlił tylko te linijki ale nie wiem jak. xD
Offline
debbie napisał(-a):
Jednak wpadłem na pomysł, że będę listował katalogi wrzucając wynik do pliku :
Kod:
for i in /root/katalog1/*; do echo $i; done > plik1.txtpo 3 godzinach
Kod:
for i in /root/katalog1/*; do echo $i; done > plik2.txt
Ale kombinujesz facet...
find /root/katalog1/ > plik1.txt
Powyższe wylistuje tylko pliki ze ścieżkami. Czyli określi obecność danych plików.
Diff, chyba dobrze
diff plik1.txt plik2.txt | grep ">" > plik_roznic.txt
Taka ciekawostka... wydaje mi się, że to jest lepsze rozwiązanie... testowałem chwilę na swoim profilu, wynalazł w odstępie parominutowym różnice w plikach cache przegladarki...
comm -23 <(sort plik1.txt) <(sort plik2.txt) > plik_roznic2.txt
Pozatym nadal nie rozumiem co chcesz osiągnąć.
Skąd wytrzaśniesz te pliki? Będą własnie w tym miejscu generowane przez jakąś aplikacje?
Czy pliki ww. folderu będą modyfikowane po znalezieniu sie w tym folderze? Czy będą nadpisywane w jakis sposób?
Czy trzeba porównywać wielkość?
To są ważne pytania. Może samo find by jednak wystarczyło.
http://www.thegeekstuff.com/2009/06/15-practical-un … mples-part-2/
Offline
opcja
diff plik1.txt plik2.txt | grep ">" > plik_roznic.txt
rozwiązuje problem...
teraz tylko zastanawiam się w jaki sposób przerobić te polecenie aby uzyskał
SWÓJ_TEKST//root/katalog1/nowosc SWÓJ_TEKST//root/katalog1/nowosc1 SWÓJ_TEKST//root/katalog1/nowosc/plik1.txt
bez znaku ">"... tylko w takiej formie...
Offline
debbie napisał(-a):
opcja
Kod:
diff plik1.txt plik2.txt | grep ">" > plik_roznic.txtrozwiązuje problem...
teraz tylko zastanawiam się w jaki sposób przerobić te polecenie aby uzyskałKod:
SWÓJ_TEKST//root/katalog1/nowosc SWÓJ_TEKST//root/katalog1/nowosc1 SWÓJ_TEKST//root/katalog1/nowosc/plik1.txtbez znaku ">"... tylko w takiej formie...
Chyba tak, ręki se uciąć nie dam... bo bym nie miał ręki ;)
diff plik1.txt plik2.txt | grep ">" | sed 's/>/SWÓJ_TEKST/g' > plik_roznic.txt
Offline
Do wyszukiwanie jest też polecenie
find
Offline
Yampress napisał(-a):
Do wyszukiwanie jest też polecenie
find
Naturalnie... już to przerabialiśmy tutaj...
Offline
troche męczę sed'a...z backslashami...
sciezka="\\SERWERO" diff plik1.txt plik2.txt | grep ">" | sed 's/>/'$sciezka'/g' > plik_roznic.txt
otrzymuje
sed: -e wyrażenie #1, znak 19: nieprawidłowe odwołanie \1 po prawej stronie polecenia `s'
Offline
Jak dla mnie to go raczej męczysz swoją ścieżką i pojedynczymi cudzysłowami...
Tak się seda nie używa...
Dlaczego nie skorzystasz z tego? Znacznie lepsze i bardziej eleganckie rozwiązanie.
comm -23 <(sort plik1.txt) <(sort plik2.txt) > plik_roznic2.txt
Offline
Nie bardzo wiem czy się rozumiemy?
Ja potrzebuję otrzymać plik z lista plików i katalogów które zostały dodane...
i potrzebuję utworzyć sobie konkretną maskę:
\\SERWERO\katalog1\plik1 \\SERWERO\katalog1\plik2 \\SERWERO\katalog1\plik3 \\SERWERO\katalog1\nowy_katalog\plik32
itd... właściwie sed mi to załatwia...tylko burzy się trochę do "\\"
Offline