Некоторое время назад я написал скрипт, который перемещает файлы и каталоги из Загрузки
к .Загрузки
если они старше 3 дней, и удалить их из этого каталога через 30 дней. Он работает нормально, но только для файлов без пробелов.
Я исследовал и обнаружил, что найти
Команда, которую я использую в сценарии, не работает, как я ожидал, для любого файла или каталога с пробелами в их имени.
Вот что найти
делает:
Я ожидал увидеть найти
Команда также находит файлы с пробелами.
Вот сценарий:
#! /бин/баш
# установить -х
экспорт ДИСПЛЕЙ =: 0,0
# true - удалить, иначе - переместить
функция процесса () {
если [ "$2" = "УДАЛИТЬ" ]; тогда
rm -r "$1" && notify-send "$3 $1 удалено!"
еще
mv "$1" "../.Downloads/$1" && notify-send "$3 $1 перемещено в ~/.Downloads/$1!"
фи
}
# удалить пустые каталоги
для пустого каталога в `find ~/Desktop/ ~/Downloads/ -empty -type d`; делать
notify-send "Directoy $emptyDir был удален, т.к. был пуст!"
сделано
найти ~/Рабочий стол/ ~/Загрузки/ -пусто -тип d -удалить
# удалить/переместить старые файлы/директории
если [ -z "$1" ] || [ "${1,,}" != "удалить" ] && [ "${1,,}" != "переместить" ]; тогда
echo "Указать режим параметра (удалить/переместить)"
выход
фи
если [ "${1,,}" == "удалить" ]; тогда
день=30
путь=".Загрузки"
режим = "УДАЛИТЬ"
еще
день=2
путь = "Загрузки"
режим = "ПЕРЕМЕЩЕНИЕ"
кр
если [ ! -d "~/.Загрузки" ]; тогда
mkdir -p ~/.Загрузки
фи
фи
компакт-диск ~/$путь
для элемента *
делать
если [-d "$элемент"]; тогда
если [$(find "$element" -type f -mtime -$day | wc -l) -eq 0 ]; тогда
процесс "$element" "$mode" "Directory"
фи
еще
если [ $(find `pwd` -name "$element" -mtime +$day | wc -l) -gt 0 ]; тогда
процесс "$element" "$mode" "Файл"
фи
фи
сделано
Прошу Вас подсказать, что я могу делать не так.
Заранее спасибо!