Путь к ksh
в первой строке файла не совпадает с путем к ksh
в вашей системе.
Отредактируйте файл в соответствии с реальностью, и скрипт запустится, как ожидалось.
Si desea usar find
para eliminar solo archivos normales y ningún directorio, asegúrese absolutamente de usar -type f
. Esto evitará que se procesen los nombres de ruta que hacen referencia a directorios (o cualquier cosa que no sea un archivo normal ).Los directorios se eliminaron porque su última marca de tiempo modificada cumplió con los criterios para la eliminación.
Además, si está eliminando archivos, no use rm -r
ya que recurrir a un archivo normal no tiene sentido. Con la mayoría de las implementaciones find
, también puede optar por usar -delete
en lugar de -exec rm
.
El -name "*"
es una operación no -y podría eliminarse ya que cada nombre coincide con *
.
Si ejecuta find over /log/dir
, entonces no necesita ejecutarlo en /log/dir/tmp
ya que este último se procesará como parte del primero. Si tiene la intención de buscar solo en estos dos directorios, pero no en los subdirectorios, agregue -maxdepth 1
afind
(si lo admite ), y en ese caso, necesita para procesarlos por separado (pero esto se puede hacer en una find
invocación ya que la utilidad toma cualquier número de directorios principales -).
Sugerencia, dependiendo de lo que quieras lograr:
find /log/dir /log/dir/tmp -maxdepth 1 -type f -mtime +7 -delete
El mtime
de un directorio se actualiza cuando se agrega o elimina un archivo del directorio. Por lo tanto, no está claro si sus intentos de eliminar directorios en función de la última marca de tiempo modificada son una buena idea para comenzar.
Para la rotación de archivos de registro, también puede considerar usar logrotate
o alguna utilidad similar, desde un trabajo cron.
Вам нужно определить, что вы подразумеваете под «старше 7 дней». К ним можно было получить доступ более 7 дней назад, изменить более 7 дней назад или создать более 7 дней назад. Все разные ситуации. Также вы уверены, что хотите считать файлы и каталогами?
Если вы хотите удалить файлы и каталоги, то вторая команда является избыточной, поскольку /log/dir/tmp
будет указана в списке под /log/dir
.
Использование -r
на rm в этой ситуации небрежно и, вероятно, удалит больше, чем вы хотите. Find уже рекурсивно перечисляет все файлы/каталоги, поэтому вы опережаете вывод find, рекурсивно удаляя. Придерживайтесь rm -f
и дайте найти список файлов для удаления.
Я думаю, что вы пытаетесь просто :find /log/dir/ -type f -ctime +7 -exec rm -f {} \;