Читайте также Временные метки файла (Access, Modify, Change) в Linux
Утилита find - наиболее эффективное средство поиска и «массовой обработки» файлов. Find - это не столько средство поиска, сколько инструмент для обхода файловой иерархии. Вы можете удалять файлы, соответствующие критериям поиска или даже применять к ним любую произвольную команду. Для применения команды служит ключ -exec. По умолчанию, find возвращает все файлы после текущего в рабочей директории.
Популярные варианты команды find:
find . -type f | xargs grep -ni 'logon home'
Альтернатива рекурсивоное использование Использование grep, egrep, в примере поиск производится из текущей директории
grep -r -i 'logon home' .
Рекурсивно во всех файлах заменить имя одного домена на другое
find /var/www/task42.topadm.in/wp-content/cache/supercache -type f -print0 | xargs -0 sed -i 's/task42\.darkfire\.cf/lastwp\.darkfire\.cf/g'
Замена путей для всех файлов в текущей директории, команда пригодится для переноса сайтов:
find . -type f -name '*' -exec sed -i -r 's%что_меняем%на_что_меняем%g' {} \;
Обнулить рекурсивно все error.log и вывести список обработанных файлов:
for k in `find /var/www/ -type f -name error.log`; do echo $k && echo > $k ;done
Найти файлы старше 60 минут и удалить их:
find /var/lib/pg-archive/ -type f -mmin +60 | xargs -I % rm -f %
find . -type f -name '.htaccess' -ls
find /var/vmail/* -type f -regex ".*\.\(mail\|mail:.*\)" -mtime +30 -delete -print
find . -user <username>
find /etc -newer /tmp/now
Найти файлы старше 2 часов: find . -mmin +120 Найдите файлы, которым менее 2 часов: find . -mmin -120
Найдем файлы, которые не читали более чем (условие 'более чем' задается знаком '+') 30 дней:
find . -atime +30 -print
Для поиска файлов, которые вы не модифицировали какое-то время, используйте ключ -mtime, а для файлов у которых определенное время назад не менялись права доступа используйте -ctime. Число после символа '+' задает количество дней (суток). Для того, что бы узнать какие файлы были модифицированы сегодня, попробуйте:
find . -mtime -1 -print
Эта команда покажет вам какие файлы были модифицированы за последние сутки. Заметьте, что для указания времени 'меньше чем' следует указать знак '-'.
Все три ключа time в качестве параметра используют суточные интервалы. Если вы хотите использовать более точные интервалы времени, то вам может помочь ключ -newer, который позволяет сравнивать время модификации, последнего чтения или смены прав одного файла с другим с точностью до минуты. Например для того что бы поглядеть какие скрытые (файлы с точкой в начале) были изменены с тех пор как вы последний раз изменили файл .cshrc, вы должны выполнить такую команду:
find . -type f -name ".*" -newer .cshrc -print
Обратите внимание, что мы включили в эту команду ключ -type с параметром '-f', который устанавливает тип искомого 'файл', так как в данном случае нам не нужны изменившиеся каталоги. Ключ -name будет искать файлы с именем начинающимся на точку, а ключ -newer отберет файлы, которые модифицировались позже файла .cshrc.
Продемонстрируем разницу между логическим 'И' и логическим 'ИЛИ'. Если я хочу найти все файлы в моем домашнем каталоге, которые не использовались последние 7 дней 'И' их размер больше чем 10Мб, то я использую следующую команду:
find . -atime +7 -size +20480 -print
Однако, если я хочу найти файлы которые не использовались последнюю неделю 'ИЛИ' их размер больше чем 10Мб, то мне придется выполнить такую команду:
find . -atime +7 -o -size +20480 -print
Если вы будете использовать ключ '-size', вам придется немного повычислять, так как он использует в качестве параметра число 512-байтных блоков в файле. Я могу воспользоваться командой expr для облегчения этого процесса:
find . -atime +7 -o -size +`expr 10 \* 1024 \* 2` -print
Заметьте, что в этой команде в обратных кавычках (это знак ` в левом верхнем углу вашей клавиатуры) заключено то что надо вычислить. Нам остается поставить перед выражением знак плюс, так как мы хотим найти файлы 'более чем' 10Мб размера.
Для того что бы поглядеть заранее то, что сосчитает команда expr, припишите впереди команды find команду echo:
echo find . -atime +7 -o -size +`expr 10 \* 1024 \* 2` -print find . -atime +7 -size +20480 -print
Вообще проверка сложного выражения find, для того что бы увидеть его полный вид, перед выполнением, является хорошим тоном.
# find / -size +100M -print
find / -mmin -1 -print
# find . -mtime -1 -type f -print # find . -mtime -1 -type f -exec ls -l {} \; # find . -mtime -1 -type f -print | wc # находим и командой wc считаем количество # find . -mtime -1 -type f -delete # удаляем эти файлы
$ find . -type f -exec chmod 644 {} \;
$ find . -type d -exec chmod 755 {} \;
$ find . -perm -2 -type d -ls 540771 4 drwxrwxrwx 2 user user 4096 Мар 3 20:49 ./.clamtk/viruses 540772 4 drwxrwxrwx 2 user user 4096 Мар 3 20:49 ./.clamtk/history
$ find ./ -name "*.py"
$ find / -type f -perm -04000 -ls 622 28 -rwsr-xr-x 1 root root 26228 Янв 28 20:07 /bin/fusermount 113 36 -rwsr-xr-x 1 root root 34696 Май 12 2009 /bin/ping 114 32 -rwsr-xr-x 1 root root 30492 Май 12 2009 /bin/ping6 144 48 -rwsr-xr-x 1 root root 47096 Окт 23 00:54 /bin/umount 91 72 -rwsr-xr-x 1 root root 72188 Окт 23 00:54 /bin/mount 135 32 -rwsr-xr-x 1 root root 31124 Июл 31 2009 /bin/su find: `/etc/cups/ssl': Permission denied find: `/etc/chatscripts': Permission denied find: `/etc/ppp/peers': Permission denied 95333 8 -rwsr-x--- 1 root gnokii 5548 Апр 30 2009 /usr/sbin/mgnokiidev
чтобы избавится от ошибок Permission denied, команду можно запустить так
$ find / -type f -perm -04000 -ls 2>/dev/null
то есть сообщения об ошибках (2 – это дескриптор потока STDERR) выбрасываются, остается лишь нормальный вывод STDOUT.
$ find /var/phoenix/ -name “*.jpg” | xargs -I mv {}/var/phoenix/Images
find ./ -type f | xargs -d\\n md5sum | sort | uniq -D -w 32 >duplicates.txt
$ find /var/phoenix/Images/ -name “*.jpg” -size -1024k | xargs -i mv {} /var/phoenix/Images/tiny
#!/bin/bash # Скрипт рекурсивно перебирает все файлы начиная с директории запуска. # И ищет в них вхождение переданной строки и выводит на консоль # в запускаемый скрипт нужно передать парметр - строку поиска, например # ./find_xargs.sh ivsenaidu.ru FIND="/usr/bin/find" XARGS="/usr/bin/xargs" GREP="/bin/grep" # Directory search SDIR=`pwd` #SDIR=$0 # The search string SSTR=$1 echo Find \'$SSTR\' into \'$SDIR\':; $FIND $SDIR | $XARGS $GREP -ni "$SSTR"