Перемістіть файли в інший каталог, старший за дату


28

Я шукаю рішення перемістити файли, які на сьогоднішній день старші. Мій розділ журналу заповнюється, але я не можу їх видалити. Вони потрібні дуже довго. У будь-якому випадку я придумав таке рішення:

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

Це би спрацювало? Запитуючи, що через " -mtime 365 " це перемістить файли, які на сьогоднішній день старші на сьогодні, на нове місце?

Дякую!

Відповіді:


40

Ти майже правий. -mtime 365будуть усі файли, яким рівно 365 днів. Ви хочете тих, кому виповнилося 365 днів або більше, а це означає, що ви додасте +перед цим числом -mtime +365.

Вас також може зацікавити -maxdepth 1прапор, який не дозволяє вам переміщувати елементи в підкаталогах.

Якщо ви хочете бути впевнені, що ви пересуваєте лише файли, а не каталоги, додайте -type fдо рядка.

В кінці рядка ми додаємо \;так, що findзнає, що це кінець команди, яку ми виконуємо.

Отже, лінія повинна бути:

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

Щоб бути в безпеці, почніть з простого ls -l замість mv - таким чином ви можете заздалегідь перевірити, що ви отримуєте саме потрібні файли, перш ніж повторно запустити його з mv, як це:

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

3
Майте на увазі, що mtimeце час Модифікація (це звучить як те, що ви, мабуть, хочете - більшу частину часу це є). Якщо ці журнали часто читаються / посилаються на них, можливо, ви хочете використовувати -atime(останній час доступу).
voretaq7

2
Що робить зворотний нахил в кінці цього рядка?
Бен Ліянаж

1
@BenLiyanage Зворотна косою рисою є символом для крапки з комою, що випливає. Точка з комою означає кінець execвисловлювання. Дивіться сторінку чоловіка для find.
Дженні Д каже, що поверніть Моніку

4

Будьте обережні при використанні вищезазначених рішень, я використав їх і закінчив переміщення всіх файлів у всіх папках !!!!

Ця команда переміщує всі файли в каталозі / source та всі підпапки в каталозі source:

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

Замість цього використовуйте параметр -maxdepth 1 лише для файлів у / sourcedirectory

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

Відповідь з найвищим рейтингом містить цю примітку і пропонує використовувати -type f. Ви це мали на увазі замість того, що підпапки дійсно переміщуються, але вміст їх залишається у папках, а не переміщуватися з них або ...?
австрійський

1
ні, я маю на увазі, що "знайти" знайде всі файли в / sourcedirectory та всі підпапки в цій / sourcedirectory, про які я не думав на той час. '-Maxdepth 1' обмежує 'знайти' лише / sourcedirectory
harleygolfguy

До речі, я мав би це як лише коментар до найбільш високо оціненої відповіді, що було гарною відповіддю, але у мене немає репутації. :)
harleygolfguy

0

Ви можете скористатися цією командою та вказати, що ви знаходите лише файли, а не каталог, а файл старший одного року

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

Навіщо йому користуватися rm? Ваша команда видаляє і файли журналу, і, можливо, каталог призначення.
Свен

Ой, моя помилка, я думаю, що @mYzk хочуть видалити ці файли. Відредаговано
cuonglm

0

Ви можете використовувати команду нижче з atime, якщо до файлів можна звертатися часто

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'

Правильним буде видалення, яке закінчується косою косою рискою /sourcedirectory/

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

У своїх тестах я не зміг повторити find: missing argumentпомилку, проте я погоджуюся з тим, що відкидання косої риски /sourcedirectoryє правильним.
guzzijason
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.