Я удалил с помощью rm *.*
, однако я все еще хотел бы знать, почему rm blahblah\r\n.txt
и rm blahblah*.txt
не работают...
Несмотря на лучшие общие решения, вот причина, по которой это не удалось в этом скрипте:
FINDOPTS="-type f -mtime +3 -exec rm -rf {} \;"
^
Параметр find
ожидает символ ;
. Поскольку ;
на самом деле (не случайно)также конец ограничителя команды оболочки, его необходимо экранировать в команде оболочки, поэтому обычно набирается \;
. Если теперь вы поместите этот символ в переменную, он никогда не будет оцениваться оболочкой как разделитель. Таким образом, его нельзя экранировать.
Воспроизведение ошибки без переменной:
$ find /etc -exec ls "\;"
find: missing argument to `-exec'
Так что просто замените строку на:
FINDOPTS="-type f -mtime +3 -exec rm -rf {} ;"
Вместо find [...] -exec rm
я предлагаю использовать встроенный -функционал :
find [...] -delete
Из инструкции:
-delete
Delete found files and/or directories. Always returns true. This executes
from the current working directory as find recurses down the tree. It will
not attempt to delete a filename with a ``/'' character in its pathname
relative to ``.'' for security reasons. Depth-first traversal processing
is implied by this option. Following symlinks is incompatible with this
option.
(между прочим, вы понимаете, что команда в вашем вопросе удалит любые файлы старше трех дней с момента их последней модификации, да?)