find /full/path/dir -name '*.txt' -exec /bin/rm {} \;
Прекрасно в оболочке, но вставьте его в сценарий sh вместе с некоторыми аналогичными строками, чтобы заставить его запускаться каждую ночь из cronjob, и он сообщает:
find: missing argument to `-exec'
на все. Я пробовал использовать обратную косую черту и кавычки, возможно, в каждой комбинации. Как я могу заставить это работать?
Я не могу представить почему
find /full/path/dir -name '*.txt' -print0 | xargs -0 rm
не сработает. Чтобы проверить работу cron, сделайте что-то вроде этого:
find /full/path/to/dir -name '*.txt' -print0 | xargs -0 >/tmp/logfile
который будет просто повторять то, что xargs удалит в /tmp/logfile
так что вы можете проверить вручную.
У вас, вероятно, есть окончания строк Windows в вашем файле сценария. Попробуйте бежать dos2unix
на нем, чтобы преобразовать их.
Вы можете воспроизвести эту ошибку в приглашении оболочки с помощью:
$ find ... \;^M
Где вы добавляете "^ M", нажимая Ctrl-v Ctrl-м
Эта ошибка возникает, когда find не соответствует ни одному файлу с этим критерием, затем пытается выполнить rm с пустым стеком и возвращает эту ошибку.
Предложение Фила потрясающее, поэтому, пожалуйста, отметьте его! :)