Команда найти и rm удалила файлы внутри каталога и сам каталог

Путь к ksh в первой строке файла не совпадает с путем к ksh в вашей системе.

Отредактируйте файл в соответствии с реальностью, и скрипт запустится, как ожидалось.

-1
27.02.2018, 12:20
2 ответа

Si desea usar findpara 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 -rya que recurrir a un archivo normal no tiene sentido. Con la mayoría de las implementaciones find, también puede optar por usar -deleteen 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/tmpya 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 1afind(si lo admite ), y en ese caso, necesita para procesarlos por separado (pero esto se puede hacer en una findinvocació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 mtimede 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 logrotateo alguna utilidad similar, desde un trabajo cron.

2
28.01.2020, 05:08

Вам нужно определить, что вы подразумеваете под «старше 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 {} \;

0
28.01.2020, 05:08

Теги

Похожие вопросы