Перемещение файлов, отсортированных по дате, из внутренней памяти на SD - PullRequest
1 голос
/ 08 мая 2020

Я хотел бы попросить вас помочь создать правильную работу, чтобы выполнить следующие шаги: Начиная каждый день в 4:45 утра, получайте файлы из пути X и перемещайте их в путь Y, следуя этим правилам: 1003 * дата изменения файлов должна быть на 1 неделю раньше

размер файлов должен быть не менее 1 МБ расширение файлов должно быть .mp4 или .mp3

Возможное решение с использованием команд оболочки:

source=/path/to/X
dest=path/to/Y
find $source -name '*.mp[34]' -size +1M -mtime +7 -exec mv {} $dest \;

Я попробовал это сейчас на своем телефоне (который не рутирован) с помощью Tasker v.5.9.2, и вот результат:

00.29.47/E Run Shell: ->
00.29.47/E Run Shell: ->
00.29.47/E Run Shell: ->
00.29.47/Shell runBackground source="/storage/emulated/0/WhatsApp/Media/WhatsApp Video"
dest="/storage/A232-BF34/Media/WhatsApp Video"
find $source -name '*.mp[34]' -size +1M -mtime +1 -exec mv {} $dest \; root: false timeout: -1
00.29.47/Shell start process-thread ID 110080
00.29.47/E add wait type Shell1 time 2147483647
00.29.47/E add wait type Shell1 done
00.29.47/E add wait task
00.29.47/E Error: 1

Я пытался сохранить команду stderr from find, но файл "out.txt" не был создан. Вот команда поиска, которую я запустил:

find $source -name '*.mp[34]' -size +7 -mtime +7 -exec mv {} $dest \; 2>$dest/out.txt

Из приведенной выше ошибки я вижу эту ошибку:

root: false timeout: -1

, но я не знаю, насколько это полезно для понимания ошибки .

Итак, я очень признателен за помощь.

1 Ответ

0 голосов
/ 28 августа 2020

Ваша команда полностью верна . Но поскольку ваш телефон не рутирован , команда exe c возвращает ошибку. Хотя я нашел одно решение / обходной путь для пользователей, отличных от root:

Изображения / видео говорят лучше, чем слова. Проверьте изображения ниже для ясности. Изображения прикреплены в виде ссылок.

РЕШЕНИЕ:

  • find $source -name '*.mp[34]' -size +7 -mtime +7

Найти ссылку на команду

Выполнить указанную выше команду без exe c, Сохранить вывод / ошибку в двух разных переменных. Эта переменная будет содержать все пути к файлам , которые удовлетворяют всем условиям, указанным в команде find.

  • Используйте Variable Search Replace action в выходной переменной, чтобы заменить \n на ,

Поиск заменить изображение

  • Затем используйте Variable Split action, чтобы разделить каждый путь к файлу на отдельные переменные с разделителем ,. Пример:% Output0% Output1 ..

Изображение действия разделения переменной

  • Используйте for Loop, чтобы перебрать эти значения и применить Move action .

Для l oop Изображение

Копировать изображение действия

Список задач для используйте

После применения этих задач / действий мы выполним требование без доступа root.

Следовательно, это переместит ваши файлы из внутреннего хранилища в SD-карта в соответствии с вашими условиями без доступа root.

Я прочитал, проанализировал, попробовал этот процесс на моем рутированном телефоне, но не предоставил root доступ к действиям Tasker. Я узнал кое-что, чем хочу поделиться с вами, если интересно, читайте дальше.

*

Почему root важен

Если у вашего телефона был доступ root, то это однострочная команда find $source -name '*.mp[34]' -size +1M -mtime +7 -exec mv {} $dest \; выполнит всю работу. Но без доступа root у нас осталось два варианта.

1-й вариант

  • find $source -name '*.mp[34]' -size +1M -mtime +7 | xargs mv --target-directory=$dest

Приведенная выше команда отлично работает в linux bash оболочке но в оболочке tasker , у нас есть одна небольшая проблема т.е. mv-команда не имеет опции --target-directory , которая исключительно сообщает mv, что целевой каталог = $ dest вместо интерпретации второго аргумента как назначения, который вызывает ошибку и этот метод не работает в Tasker .

Снова Лучше, чем слова. Проверьте ссылку на изображение ниже

Ограничения параметров команды перемещения

Вызывает ошибку

2-й вариант, который работает, но немного долго

Упоминается в начале сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...