10 примеров команд find в Linux

10 примеров команд find  в Linux

Команда Linux find является очень мощным. Она может производить поиск по всей файловой системе, чтобы найти файлы или каталоги в соответствии с критериями поиска, которые вы укажете. В этой статье я покажу 10 примеров команд Linux для поиска, которые будут очень полезны для новичков и экспертов.

1. Найти файлы, используя имя

# find /etc -name passwd
find /etc -name passwd

# 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
find /etc -iname Passwd

find /etc -iname Passwd

3. Найти файлы в зависимости от типа файлов

Найти только файлы сокетов:

# find . -type s

Найти все каталоги:

# find . -type d

Найти только обычные файлы:

# find . -type f

4. Найти файлы по времени последней модификации

# find . -mtime -7
find . -mtime -7

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» озвучена и так же описана, на этом я закончу.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.