Обходной путь заключается в том, чтобы удерживать кнопку мыши во время рисования. Это дает вам преимущество не случайно щелкнуть, например, при столкновении с экраном.
Нет необходимости в какой-либо дополнительной программе или даже скрипте, 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', чтобы разрешить только символ новой строки в качестве разделителя аргументов.
Хорошо, вот моя обратная связь.
Да, скрипт работает, но с большим предупреждением.
Если файл «удалить» не найден, он будет успешно запущен, в любом случае, но против любых файлов и применяется к тому, где бы вы ни сидели в командной строке.
Есть ли способ поставить проверку на существование другого файла?Я попытался помещать кавычки в файл удаления, чтобы обрабатывать интервал, но это не так хорошо. Итак, я выполнил ваше предложение.
Вот точная команда 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
Я получил ожидаемые результаты, так что кажется, работают.
Нет необходимости в какой-либо дополнительной программе или даже скрипте, 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', чтобы разрешить только символ новой строки в качестве разделителя аргументов.
Хорошо, вот моя обратная связь.
Да, скрипт работает, но с большим предупреждением.
Если файл «удалить» не найден, он будет успешно запущен, в любом случае, но против любых файлов и применяется к тому, где бы вы ни сидели в командной строке.
Есть ли способ поставить проверку на существование другого файла?Я попытался помещать кавычки в файл удаления, чтобы обрабатывать интервал, но это не так хорошо. Итак, я выполнил ваше предложение.
Вот точная команда 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
Я получил ожидаемые результаты, так что кажется, работают.