Как использовать команду find для выполнения двух условий в Linux

Я пытаюсь удалить файлы (файлы журналов), которые больше, чем 5 дней, и мне нужно сохранить один конкретный файл без удаления, я попробовал его, используя

find . -type f -mtime +5 ! -name 'test2' -exec rm -f {} \; 

Но это не удается. OS im используется Centos 7.

Как вы можете видеть, я создал для тестирования следующую структуру:

 mkdir test && cd test && touch file1 file2 file3 lol test2 touch -t 200805101024 file* 

получив это:

 ls -la total 8 drwxr-xr-x 2 root root 4096 Oct 13 18:09 . drwxr-xr-x 4 phphil phphil 4096 Oct 13 18:09 .. -rw-r--r-- 1 root root 0 May 10 2008 file1 -rw-r--r-- 1 root root 0 May 10 2008 file2 -rw-r--r-- 1 root root 0 May 10 2008 file3 -rw-r--r-- 1 root root 0 Oct 13 18:09 lol -rw-r--r-- 1 root root 0 Oct 13 18:09 test2 

И после выполнения вашей правильной команды:

 find . -type f -mtime +5 ! -name 'test2' -exec rm -f {} \; 

Ситуация такая, как ожидалось:

 ls -la total 8 drwxr-xr-x 2 root root 4096 Oct 13 18:09 . drwxr-xr-x 4 phphil phphil 4096 Oct 13 18:09 .. -rw-r--r-- 1 root root 0 Oct 13 18:09 lol -rw-r--r-- 1 root root 0 Oct 13 18:09 test2 

Изменить: поиск информации о командах или параметрах команд:

Когда я не уверен в поведении определенной команды и / или параметра, я делаю следующее:

 man find | less 

то вы можете искать то, что ищете в руководстве по команде, а именно:

  • тип /
  • напишите свои условия поиска, которые я им оставил – -mtime
  • то вы можете перейти к следующему появлению поисковых запросов, набрав N или предыдущий, набрав n

Я узнал эту интересную информацию:

  -mtime n File's data was last modified n*24 hours ago. See the comments for -atime to understand how round‐ ing affects the interpretation of file modification times.