Skocz do zawartości

Brak reakcji wyszukiwania plików poleceniem FIND i ich kasowania.


Pomocna odpowiedź

Napisano
#!/bin/bash
#kasujemy pliki nagrań z kamery po n dniach 

/usr/bin/find /media/pi/DANE/Monitoring/ -type f -name '*avi' -mtime +7 -exec rm {} \;
find /media/pi/DANE/Monitoring/ -type f -name '*avi' -mtime +7 -exec rm {} \;

Żadna z linii komend nie robi nic, tzn. coś robi i nie zgłasza błędów natomiast pliki z katalogu nie znikają, gdzie popełniłem błąd?

Pierwszą linijkę znalazłem w sieci (oprócz ścieżki), druga jest moją modyfikacją, od razu przyznam  że nie rozumiem /usr/bin, co to znaczy. druga linia "find /media/pi/DANE/Monitoring/ -type f -name '*avi'" w takiej postaci wykonuje się i wyświetla listę plików, dalsza część kodu nic nie robi. Gdzie jest błąd?

Pogubiłem się. 

(edytowany)
11 godzin temu, Takaszi napisał:

od razu przyznam  że nie rozumiem /usr/bin

A wiesz o tym, że jak przepisujesz coś bezmyślnie nie rozumiejąc co to znaczy możesz np. zamiast skasowania niepotrzebnych plików avi - skasować sobie resztę dysku zostawiając tylko te pliki?

Nie wiesz co znaczy /usr/bin, a wiesz co to C:\windows\system na przykład? No to to samo - ścieżka do pliku. Shell nie musi wiedzieć gdzie siedzi polecenie find, dlatego w skryptach lepiej podawać pełną ścieżkę.

Pytanie: co zrobi:

find /media/pi/DANE/Monitoring/ -type f -name '*avi' -mtime +7

Nie, nic nie skasuje, pytanie co wyświetli (powinien listę plików)

Dalej: czy przypadkiem w nazwie pliku nie ma spacji? Bo jeśli tak, w Twoim przypadku rm potraktuje polecenie:

rm pupa w kwiaty.avi

jako polecenie skasowania trzech plików: pupa, w i kwiaty.avi.

Drugie pytanie: o ile kojarzę poprzednie Twoje problemy nie jest przypadkiem tak, że próbujesz uruchomić to polecenie na dysku, który jeszcze nie jest zamontowany?

Trzecie pytanie: czy zadałeś sobie trudu aby wpisać w terminal "man find" czy czekasz, aż ktoś na forum to zrobi w międzyczasie kombinując jak koń pod górkę? Do kasowania plików jest opcja -delete a nie jakieś smętne kombinacje z exec i rm. Tyle na temat "poleceń znalezionych gdzieś w sieci".

Edytowano przez ethanak
8 godzin temu, ethanak napisał:

"A wiesz o tym, że jak przepisujesz coś bezmyślnie nie rozumiejąc co to znaczy możesz np. zamiast skasowania niepotrzebnych plików avi - skasować sobie resztę dysku zostawiając tylko te pliki?"

Spoko linijka zaczynająca się od /usr/bin jest po #, tylko przy kopiowaniu się nie załapał więc nie złego się nie dzieje, poza tym robię kopie.

 

8 godzin temu, ethanak napisał:

"Nie wiesz co znaczy /usr/bin, a wiesz co to C:\windows\system na przykład? No to to samo - ścieżka do pliku. Shell nie musi wiedzieć gdzie siedzi polecenie find, dlatego w skryptach lepiej podawać pełną ścieżkę."

A wiesz że nie wiedziałem, dziękuję za info.

 

8 godzin temu, ethanak napisał:

"Pytanie: co zrobi:


find /media/pi/DANE/Monitoring/ -type f -name '*avi' -mtime +7

Nie, nic nie skasuje, pytanie co wyświetli (powinien listę plików)"

Wyświetla listę plików, ale tylko wtedy gdy wygląda tak. find /media/pi/DANE/Monitoring/ -type f -name '*avi '.

 

8 godzin temu, ethanak napisał:

Dalej: czy przypadkiem w nazwie pliku nie ma spacji? Bo jeśli tak, w Twoim przypadku rm potraktuje polecenie:


rm pupa w kwiaty.avi

jako polecenie skasowania trzech plików: pupa, w i kwiaty.avi.

nazwa pliku wygląda tak, 75-20200926174120.avi

 

8 godzin temu, ethanak napisał:

Drugie pytanie: o ile kojarzę poprzednie Twoje problemy nie jest przypadkiem tak, że próbujesz uruchomić to polecenie na dysku, który jeszcze nie jest zamontowany?

Ta teoria jest błędna, sprawdziłem i dysk jest montowany w pierwszej kolejności. A problem już nie jest istotny, gdyż moje rozwiązanie daje aktualizację bazy, co mi odpowiada.

 

8 godzin temu, ethanak napisał:

Trzecie pytanie: czy zadałeś sobie trudu aby wpisać w terminal "man find" czy czekasz, aż ktoś na forum to zrobi w międzyczasie kombinując jak koń pod górkę? Do kasowania plików jest opcja -delete a nie jakieś smętne kombinacje z exec i rm. Tyle na temat "poleceń znalezionych gdzieś w sieci".

Nie man find a find --help i tak sprawdziłem, a co do -exec to cytując Linux.pl:

-exec polecenie ; Wykonuje polecenie; prawdziwe jeśli zwrócony został status 0. Wszelkie następne argumenty find są brane za argumenty polecenia, aż nie zostanie napotkany argument, składający się z `;'. Łańcuch `{}' jest podmieniany na obecnie przetwarzaną nazwę pliku. Obydwie te konstrukcje być może będą wymagały wycytowania (znakiem `\') aby uchronić je przed rozwinięciem przez powłokę. Polecenie jest wykonywane w katalogu startowym.

Wydało mi się to sensowne więc pozwoliłem sobie na zadanie pytania, jednocześnie nie śmiąc nikogo urazić.

Dziękuję za dogłębne zapoznanie się z moimi pytaniami i wątpliwościami, oraz za bezcenną pomoc.

Serdecznie pozdrawiam.

No to wyobraź sobie, że man find wyświetli ci dużo więcej niż find -help.

A co do polecenia... pomyśl: jeśli polecenie wyświetlenia listy plików nic nie wyświetla, to co zrobi polecenie skasowania tych plików? Ot, takie przemyślenie na wieczór przy herbatce...

A z ciekawości: masz tam pliki starsze niż tydzień?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...