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
[url]http://askubuntu.com/questions/470134/how-to-find-the-creation-time-of-a-file[/url]
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 [url]http://tecadmin.net/file-creation-time-linux/[/url]
Offline
wylistuje wszystkie [b]nowo utworzone pliki[/b][/quote]
Jest jeszcze jeden problem. Plik musi być faktycznie nowo utworzony... Nie może być np. skopiowany, bo wtedy nie tworzy się nowy inode.
[url=https://www.youtube.com/watch?v=rNg2Dh6gPkw]Nemo sailing home...[/url]
Offline
[quote=morfik]A "touch dupa" to co to jest? xD[/quote]
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
[quote=morfik]
Birth: -
I co mam tu zobaczyć? Nowe pliki nie maja daty modyfikacji czy coś?[/quote]
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
[quote=debbie]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
[/quote]
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.
[url]http://www.thegeekstuff.com/2009/06/15-practical-unix-linux-find-command-examples-part-2/[/url]
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
[quote=debbie]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...[/quote]
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
[b]find[/b]
Offline
[quote=Yampress]Do wyszukiwanie jest też polecenie
[b]find[/b][/quote]
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
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00092 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.225.56.79' WHERE u.id=1 |
0.00059 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.225.56.79', 1733339304) |
0.00041 | SELECT * FROM punbb_online WHERE logged<1733339004 |
0.00044 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=28680 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00205 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=28680 ORDER BY p.id LIMIT 0,25 |
0.00153 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28680 |
Total query time: 0.00612 s |