Czy można automatycznie zmienić nazwę pliku, gdy jest on umieszczony w określonym katalogu?
Na przykład mam katalog o nazwie „katalog 0”. Przenoszę lub kopiuję plik o nazwie „plik 1” do „katalog 0”. Następnie „plik 1” powinien zmienić nazwę na „plik1_ {aktualny znacznik czasu}”
linux
filesystems
Nick.h
źródło
źródło
Odpowiedzi:
Zwykle robisz to programowo podczas tworzenia lub przenoszenia pliku, ale możliwe jest uruchomienie skryptu za każdym razem, gdy plik zostanie utworzony lub przeniesiony do folderu za pomocą
incron
. Skonfiguruj plik tab zaincrontab -e
pomocą takiej linii, ale oczywiście ze swoimi ścieżkami:Następnie
/path/to/script
napisz szybką akcję zmiany nazwy. Pamiętaj, że skrypt zostanie również wywołany dla nowego pliku, który utworzysz, więc musi sprawdzić, czy plik został już odpowiednio nazwany, czy nie. W tym przykładzie sprawdza, czy plik ma dziesięciocyfrową liczbę sekund z epoki jako ostatnią część nazwy pliku, a jeśli nie, dodaje go:Edycja: Kiedy pierwszy raz to napisałem, miałem mało czasu i nie mogłem wymyślić, jak
bash
zrobić dopasowanie wzoru tutaj. Gilles wskazał, jak to zrobić bez wywoływania grep za pomocą dopasowania ERE w bash:źródło
Myślę,
inotify
że w tym przypadku można użyć tego narzędzia. W Debianie znajduje się narzędzieinoticoming
do wykonywania akcji związanych z tworzeniem plików:{}
zostanie zastąpiony nazwą pliku.Podane przeze mnie polecenie nie jest kompletne - powoduje pętlę, ponieważ gdy nazwa pliku zostanie zmieniona, zostanie rozpoznana jako nowa, więc zostanie ponownie
mv
PONOWNIE uruchomiona i tak dalej. Aby tego uniknąć, możesz użyć--suffix
opcji, jeśli wiesz, jaki przyrostek będzie w pliku przed zmianą nazwy.źródło
inoticoming
. Z ciekawości, kiedy lepiej byłoby to wykorzystaćinocron
?inoticoming
jest „podobnaincrond
, ale lżejsza i nie zaczyna się jako domyślny demon”, więc myślę, że to tylko inne rozwiązanie z nieco innym podejściem. .. Myślę, żeincron
jest to bardziej popularne - nie mam problemu ze znalezienieminoticoming
strony głównej dla niego poza Debianem ...inoticoming
tylko w dystrybucjach opartych na Debianie (w moim Gentoo nie ma dla niego ebuilda). Na stronie, którą opublikowałem, są dwa pakiety:reprepro
a poniżejinoticoming
...Możesz po prostu wziąć taki skrypt i uruchomić go ... Zostawię to jako ćwiczenie dla czytelnika, aby dodać dodatkowe bity, aby uruchomić go jako usługę i zapobiec uruchamianiu wielu kopii jednocześnie.
A oto jak działa:
źródło
perl
można zrobić wszystko, ale trwały skrypt działający w pętli X-sekundowej podczas gdy prawda jest zdecydowanie włamaniem, gdy można otrzymywać powiadomienia o zdarzeniach dotyczące zapisywania plików i reagować natychmiast, bez marnowania zasobów przez resztę czasu.