Назад | Перейти на главную страницу

sh скрипт для удаления только txt файлов с помощью find и exec rm предупреждает меня об отсутствии аргумента для exec

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 с пустым стеком и возвращает эту ошибку.

Предложение Фила потрясающее, поэтому, пожалуйста, отметьте его! :)