Сценарий очистки на основе возраста и TXT Список каталогов

Обходной путь заключается в том, чтобы удерживать кнопку мыши во время рисования. Это дает вам преимущество не случайно щелкнуть, например, при столкновении с экраном.

0
задан 5 February 2018 в 19:48

4 ответа

Нет необходимости в какой-либо дополнительной программе или даже скрипте, find может сделать это с помощью одного вызова.

Предполагаю, что у вас есть дерево каталогов:

. ├── delete ├── GoT │   ├── artwork.png │   ├── S10E05_Everybody_dies.mkv │   └── stream.ts ├── TBBT │   └── Season_01 │   ├── file.avi │   └── notes └── The_Wire ├── current.mp4 └── wallpaper.jpg

Содержимое файла delete выглядит так:

/full/path/to/GoT /full/path/to/TBBT

Эта команда find будет искать в каждом из этих каталогов файлы с указанными расширениями и возраст больше, чем 89 days:

find $(</path/to/delete) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89

Выход моего примера:

/full/path/to/GoT/stream.ts /full/path/to/GoT/S10E05_Everybody_dies.mkv /full/path/to/TBBT/Season_01/file.avi

Используйте это, чтобы проверить команду. Если он делает то, что вы хотите, просто добавьте -delete в конец команды для выполнения удаления:

find $(</path/to/delete) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89 -delete

Вы можете запустить эту последнюю команду периодически, например. используя cronjob (но сначала установите SHELL=/bin/bash в crontab, cron по умолчанию использует dash!) - могло бы быть использовано ключевое слово @daily:

@daily find $(</path/to/delete) …

Замечание о пробелах в дорожках: я действительно рекомендую избавиться от пробелов в каталоге и именах файлов в целом, но если вам действительно нужно иметь пробелы в путях, вы можете сначала установить IFS=$'\n', чтобы разрешить только символ новой строки в качестве разделителя аргументов.

2
ответ дан 17 July 2018 в 21:30

Хорошо, вот моя обратная связь.

Да, скрипт работает, но с большим предупреждением.

Если файл «удалить» не найден, он будет успешно запущен, в любом случае, но против любых файлов и применяется к тому, где бы вы ни сидели в командной строке.

Есть ли способ поставить проверку на существование другого файла?

Я попытался помещать кавычки в файл удаления, чтобы обрабатывать интервал, но это не так хорошо. Итак, я выполнил ваше предложение.

Вот точная команда as-run:

IFS=$'\n' && find $(</opt/deletelist) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89

Я получил ожидаемые результаты, так что кажется, работают.

0
ответ дан 17 July 2018 в 21:30

Нет необходимости в какой-либо дополнительной программе или даже скрипте, find может сделать это с помощью одного вызова.

Предполагаю, что у вас есть дерево каталогов:

. ├── delete ├── GoT │   ├── artwork.png │   ├── S10E05_Everybody_dies.mkv │   └── stream.ts ├── TBBT │   └── Season_01 │   ├── file.avi │   └── notes └── The_Wire ├── current.mp4 └── wallpaper.jpg

Содержимое файла delete выглядит так:

/full/path/to/GoT /full/path/to/TBBT

Эта команда find будет искать в каждом из этих каталогов файлы с указанными расширениями и возраст больше, чем 89 days:

find $(</path/to/delete) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89

Выход моего примера:

/full/path/to/GoT/stream.ts /full/path/to/GoT/S10E05_Everybody_dies.mkv /full/path/to/TBBT/Season_01/file.avi

Используйте это, чтобы проверить команду. Если он делает то, что вы хотите, просто добавьте -delete в конец команды для выполнения удаления:

find $(</path/to/delete) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89 -delete

Вы можете запустить эту последнюю команду периодически, например. используя cronjob (но сначала установите SHELL=/bin/bash в crontab, cron по умолчанию использует dash!) - могло бы быть использовано ключевое слово @daily:

@daily find $(</path/to/delete) …

Замечание о пробелах в дорожках: я действительно рекомендую избавиться от пробелов в каталоге и именах файлов в целом, но если вам действительно нужно иметь пробелы в путях, вы можете сначала установить IFS=$'\n', чтобы разрешить только символ новой строки в качестве разделителя аргументов.

2
ответ дан 23 July 2018 в 22:08
  • 1
    Вероятно, вам нужно установить SHELL=/bin/bash в crontab, $(<...) не будет работать в тире. – muru 6 February 2018 в 12:43
  • 2
    @muru Добавлено, спасибо! – dessert 6 February 2018 в 12:45
  • 3
    Вау! Большое спасибо за быстрый ответ. Я дам ему пробный прогон и посмотрю, как все идет. – DGC 6 February 2018 в 23:25

Хорошо, вот моя обратная связь.

Да, скрипт работает, но с большим предупреждением.

Если файл «удалить» не найден, он будет успешно запущен, в любом случае, но против любых файлов и применяется к тому, где бы вы ни сидели в командной строке.

Есть ли способ поставить проверку на существование другого файла?

Я попытался помещать кавычки в файл удаления, чтобы обрабатывать интервал, но это не так хорошо. Итак, я выполнил ваше предложение.

Вот точная команда as-run:

IFS=$'\n' && find $(</opt/deletelist) -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.mpg" -o -name "*.mpeg" -o -name "*.avi" -o -name "*.xvid" -o -name "*.ts" \) -mtime +89

Я получил ожидаемые результаты, так что кажется, работают.

0
ответ дан 23 July 2018 в 22:08

Другие вопросы по тегам:

Похожие вопросы: