#linux #bash #shell #find
#linux #bash #оболочка #Найти
Вопрос:
Я создаю скрипт с приведенными ниже командами в solaris
name=$(date "%y-%m-%d")
mkdir /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/$name
find /cms/Oracle/Middleware/dib_common/Advices/EMAIL/ -type f -mtime 30 -exec mv {} /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/$name ;
tar -zcvf /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/${name}.tar.gz /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/${name}
find /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/ -mtime 60 -name "*.tar.gz" -exec rm {} ;
-maxdepth
выдает ошибку ниже.
-bash-4.4$ find /cms/Oracle/Middleware/dib_common/Advices/EMAIL/ -type f -mtime 30 -maxdepth 1 -exec mv {} /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/$name ;
find: bad option -maxdepth
find: [-H | -L] path-list predicate-list
-bash-4.4$
Даже -path
не работает.
Есть ли здесь какое-либо обходное решение.
Мое требование заключается в том, что я хочу находить файлы только из каталога ниже, а не из любого подкаталога
/cms/Oracle/Middleware/dib_common/Advices/EMAIL/
Комментарии:
1. На справочной странице Solaris
find
указано, что она поддерживает эту опцию, отличную от POSIX?
Ответ №1:
Команда поиска:
find path/to/the/dir -type f -maxdepth 1
может быть заменен на:
find path/to/the/dir/. -not -name . -type d -prune -o -type f
find
Команда интерпретирует приведенную выше последовательность как:
- Найдите каталог
path/to/the/dir
рекурсивно. - Если имя не «.», а тип «каталог», тогда пропустите (-сократите) его.
- В противном случае (-o) переходите к следующему условию.
В соответствии с описанным примером, пожалуйста, попробуйте изменить строку:
find /cms/Oracle/Middleware/dib_common/Advices/EMAIL/ -type f -mtime 30 -maxdepth 1 -exec mv {} /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/$name ;
как:
find /cms/Oracle/Middleware/dib_common/Advices/EMAIL/. -not -name . -type d -prune -o -type f -mtime 30 -exec mv {} /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/"$name" ;
Комментарии:
1. Ниже работает для меня сейчас. спасибо @tshiono , rowboat , shawn `find /cms/ Oracle/ Middleware/dib_common/Советы / Электронная ПОЧТА /. ! -name . -prune -type f -mtime 30 -exec mv {} /cms/Oracle/Промежуточное программное обеспечение/dib_common/архив / Советы / ЭЛЕКТРОННАЯ почта/»$name» ;1
Ответ №2:
Ниже работает для меня сейчас. Просто обновить -not также недоступна в моей среде.
find /cms/Oracle/Middleware/dib_common/Advices/EMAIL/. ! -name . -prune -type f -mtime 30 -exec mv {} /cms/Oracle/Middleware/dib_common/archive/Advices/EMAIL/"$name" ;