Przenieś pliki do innego katalogu, który jest starszy niż data


28

Szukam rozwiązania do przenoszenia plików, które są o rok starsze od dzisiaj. Moja partycja dziennika jest pełna, ale nie mogę ich usunąć. Są potrzebne przez długi czas. W każdym razie jednym z moich pomysłów jest:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

Czy to zadziała? Pytanie, czy z powodu „ -mtime 365 ” przeniesie pliki starsze o rok od dzisiaj do nowej lokalizacji?

Dziękuję Ci!

Odpowiedzi:


40

Masz prawie rację. -mtime 365będą wszystkie pliki, które mają dokładnie 365 dni. Chcesz te, które mają 365 dni lub więcej, co oznacza dodanie +przed liczbą taką jak ta -mtime +365.

Możesz być także zainteresowany -maxdepth 1flagą, która uniemożliwia Ci przenoszenie przedmiotów w podkatalogach.

Jeśli chcesz mieć pewność, że przenosisz tylko pliki, a nie katalogi, dodaj -type fdo wiersza.

Na końcu wiersza dodajemy \;, aby findwiedzieć, że to koniec wykonywanego polecenia.

Więc linia powinna być:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

Aby być bezpiecznym, zacznij od wykonania polecenia ls -l zamiast mv - w ten sposób możesz z wyprzedzeniem sprawdzić, czy otrzymujesz dokładnie te pliki, które chcesz, przed ponownym uruchomieniem go za pomocą mv:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;

3
Pamiętaj, że mtimejest to czas modyfikacji (który brzmi jak to, czego prawdopodobnie chcesz - przez większość czasu). Jeśli te dzienniki są odczytywane / do których często się odwołujesz, możesz z nich skorzystać -atime(czas ostatniego dostępu).
voretaq7

2
Co robi ukośnik odwrotny na końcu tej linii?
Ben Liyanage,

1
@BenLiyanage Odwrotny ukośnik jest znakiem ucieczki dla następującego średnika. Średnik oznacza koniec execinstrukcji. Zobacz stronę podręcznika dla find.
Jenny D mówi Przywróć Monikę

4

Zachowaj ostrożność podczas korzystania z powyższych rozwiązań, użyłem ich i skończyłem przenoszeniem wszystkich plików we wszystkich podfolderach !!!!

To polecenie przenosi wszystkie pliki w katalogu / source i wszystkie podfoldery w katalogu źródłowym:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

Zamiast tego użyj opcji -maxdepth 1 tylko dla plików w / sourcedirectory

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

Najwyżej oceniana odpowiedź zawiera tę notatkę i sugeruje użycie -type f. Czy miałeś na myśli to, że podfoldery się przenoszą, ale ich zawartość pozostaje w podfolderach zamiast się z nich przenosić lub ...?
austriacki

1
nie, mam na myśli, że „find” znajdzie wszystkie pliki w / sourcedirectory i wszystkie podfoldery w tym / sourcedirectory, o czym wtedy nie myślałem. „-Maxdepth 1” ogranicza „find” tylko do / sourcedirectory
harleygolfguy

BTW, miałbym to jako komentarz do najwyżej ocenianej odpowiedzi, która była dobrą odpowiedzią, ale nie mam reputacji. :)
harleygolfguy

0

Możesz użyć tego polecenia i określić, że znajdziesz tylko pliki, a nie katalog, a plik jest starszy niż rok

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;

Dlaczego miałby używać rm? Twoje polecenie usuwa zarówno pliki dziennika, jak i katalog docelowy.
Sven

Ops, mój błąd, myślę, że @mYzk chce usunąć te pliki. Edytowane
cuonglm

0

Możesz użyć poniższego polecenia atime, jeśli pliki są często używane

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;

0
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

Prawidłowe byłoby usunięcie kończącego ukośnika z /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

W moich testach nie byłem w stanie powtórzyć find: missing argumentbłędu, jednak zgadzam się, że usunięcie ukośnika końcowego /sourcedirectoryjest prawidłowe.
guzzijason
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.