
10 примеров команд find в Linux
Команда Linux find является очень мощным. Она может производить поиск по всей файловой системе, чтобы найти файлы или каталоги в соответствии с критериями поиска, которые вы укажете. В этой статье я покажу 10 примеров команд Linux для поиска, которые будут очень полезны для новичков и экспертов.
1. Найти файлы, используя имя
# find /etc -name passwd
Допустим у меня есть веб сервер и все мои файлы (HTML, php) лежат в директории /var/www/, в которую я уже перешел. Мне нужно найти файлы которые не открывались (не изменялись) около 1 месяца после поиска нужно положить (скопировать) ссылки на данные файлы в директорию /var/www/my_test_domain:
# find \( -name "*.htm" -o -name "*.html" \) -a -ctime -30 \ -exec ln {} /var/www/my_test_domain \;
2. Найти файлы, используя имя с учетом регистра
# find /etc -iname Passwd
3. Найти файлы в зависимости от типа файлов
Найти только файлы сокетов:
# find . -type s
Найти все каталоги:
# find . -type d
Найти только обычные файлы:
# find . -type f
4. Найти файлы по времени последней модификации
# find . -mtime -7
5. Поиск файлов по размеру
Найти файлы больше, чем 200 мб:
# find /var -size +200M
Найти файлы, размер которых меньше 50 мб:
# find /var -size -50M
6. Найти файлы, используя разрешение
# find /var -perm 777
7. Поиск и удаление
Удалить PHP файлы можно следующим образом:
# find . -iname "*.php" -exec rm -rf {} \;
или
# find . -iname "*.php" -print | xargs rm –f
8. Найти все пустые файлы
# find /var -empty
9. Поиск файлов только в текущем каталоге, не искать у вложенных каталогов этой директории:
# find /etc -maxdepth 1 -name passwd
10. Найти файлы с различными расширениями
# find / -type f \( -name "*.php" -o -name "*.php5" \)
Скопировать все файлы которые имеют расширение *.txt в файлы с соответствующим началом *.new.txt (например был файл file_1.txt, а нужно чтобы стал file_1.new.txt):
# find /home/captain/src/ | xargs -l -I{} sh -c 'a={}; cp $a 'echo $a | sed 's/txt$/new.txt/'' # find | xargs -l -I{} sh -c 'a={}; cp $a `basename $a .txt`.new.txt'
Это я нашел в интернете, но оно у меня не работало, оставил, может кто то поправит.
Я написал скрипт следующего содержания:
# vim /home/captain/cp.sh
#!/bin/sh for i in `find /home/captain/src/ -iname "*.txt"` do NAME=`echo "$i" | sed 's/\.txt/new.txt/'` cp $i $NAME done
И еще одна версия:
# for i in *.txt; do cp ${i} ${i%.*}.new.${i#*.} ; done
Тема «10 примеров команд find в Linux» озвучена и так же описана, на этом я закончу.