Linux find exec chmod

10 Advanced Find Exec examples in Linux

Are you tired of manually searching through countless files and directories to find what you need?

Look no further than the find exec command!

With this powerful tool, you can easily locate and take action on files that meet your specific criteria.

Simply provide a directory and set your search conditions to quickly find what you’re looking for. And with the exec option, you can perform actions such as deleting or moving those files with ease.

By learning how to use the find exec command, you can save time and effort in managing your files and directories.

Find exec command syntax

There are two syntaxes for find exec.

  • <> Is a placeholder for the result found by find
  • \; Says that for each found result, the command cmd is executed once with the found result.
  • It is executed like this: cmd result1; cmd result2; …; cmd result N
  • <> Is a placeholder for the result found by find
  • \+ Says that for all found results, the command cmd is executed with all the found results.
  • It is executed like this: cmd result1 result2 … result N

when we should use find exec \; other than \+

  • The tool run by -exec does not accept multiple files as an argument
  • Running the tool on so many files at once might use up too much memory
  • We want to start getting some results as soon as possible, even though it will take more time to get all the results

Find exec with du – Collect file size

In this example, we will find all files under /tmp and collect the size for each file.

# find /tmp/ -type f -exec du -sh <> \;

Here, -type f means lookout for regular files. With the following find exec example, we can store the output to a file.

# find /tmp/ -type f -exec du -sh <> \; > /root/du_datababse.out

Find exec with rm – Remove files

In the below find exec example, we will list files older than 10 days

List files older than 10 days under /tmp directory

# find /tmp/ -type f -mtime +10 -exec ls -l <> \;

To remove files older than 10 days

# find /tmp/ -type f -mtime +10 -exec rm -rf <> \;

Here -mtime means file’s data was last modified n*24 hours ago

The /tmp/ directory is typically used to store temporary files, and over time, these files can accumulate and consume disk space unnecessarily.

By running this command, you can automatically delete files that have not been modified in the last 10 days, freeing up disk space and ensuring that only relevant and recent files remain in the /tmp/ directory.

Читайте также:  Операционная система линукс чем лучше

It is important to exercise caution when using the rm command with the -exec option, as it will permanently delete the matched files without further confirmation. Make sure you review and verify the command before executing it to avoid unintentional data loss.

Find exec with mv – Rename files

Suppose you have multiple files spread across different directories that need to be renamed. Using this command, you can search for files matching the specified pattern and rename them in bulk.

Mv command is used to rename files in Linux.

This command we use find exec to rename files where the found files are stored in <> and then the files are renamed with _renamed extension

# find / -type f -name ‘howtouselinux*’ -exec mv <> <>_renamed \;

The command utilizes the find command to locate files matching the specified criteria and the -exec option to execute the mv command for each matched file.

Find exec with chmod – change file permissions

We can combine find exec with multiple commands in one line. Find will continue to run one by one.

So each consecutive -exec command is executed only if the previous ones returned true (i.e. 0 exit status of the commands).

# find /tmp/dir1/ -type f -exec chown root:root <> \; -exec chmod o+x <> \;

Find exec with grep in Linux

We can combine find exec with grep if we wish to look for files with certain content.

For example below we need the list of files that has the string “howtouselinux”. But find exec grep print filename didn’t work here as we only get matched string.

# find /tmp/ -type f -exec grep -i howtouselinux <> \;

This is a dummy config file owned by howtouselinux
This is a dummy config file owned by howtouselinux
This is a dummy config file owned by howtouselinux

Find exec with grep and print filename

Now in the above command, we get a list of output from files that contain howtouselinux string. But it does not print the filename.

Here find exec grep print filename using different methods. In the below example we will combine find exec andd print filename.

# find /tmp/ -type f -exec grep -i howtouselinux <> \+

/tmp/dir2/text3:This is a dummy config file owned by howtouselinux
/tmp/dir2/text1:This is a dummy config file owned by howtouselinux
/tmp/dir2/text5:This is a dummy config file owned by howtouselinux

Alternatively, we can also use the below commands to combine find exec grep print filename.

# find /tmp/ -type f -exec grep -i “howtouselinux” <> \; -exec echo <> \;
# find /tmp/ -type f -exec grep -i “howtouselinux” <> \; -print

Find exec with shell script function

We can combine find exec with shell script function.

# find ./ -type f -exec bash -c ‘ls -lrt <>‘ \;

Find exec with pipe

We can combine find exec with pipe. In the below example we are going to combine find exec with pipe multiple times.

# find /tmp/dir1/ -type f -exec sh -c ‘egrep -i a «$1» | grep -i howtouselinux’ sh <> \;

Читайте также:  Настройка бэкапа на линукс

This example is a little complex. It is part of shell programming. We can refer to the following example.

sh -c ‘echo “You gave me $1, thanks!”‘ sh “apples”
You gave me apples, thanks!

That example works like this.
egrep -i a filename |grep -i howtouselinux

Grep and find exec with sed

We can combine find exec with sed or with awk. In the below example we combine grep and find exec with sed.

# find /tmp/dir1/ -type f -exec grep howtouselinux <> \; -exec echo <> \; | sed ‘s/howtouselinux/deep/g’

In the below example we will combine find exec with the link option.

# find /tmp/dir1/ -links +1 -type f -exec echo <> \;

David is a Cloud & DevOps Enthusiast. He has years of experience as a Linux engineer. He had working experience in AMD, EMC. He likes Linux, Python, bash, and more. He is a technical blogger and a Software Engineer. He enjoys sharing his learning and contributing to open-source.

howtouselinux.com is dedicated to providing comprehensive information on using Linux.

We hope you find our site helpful and informative.

Источник

Linux find exec chmod

Библиотека сайта rus-linux.net

locate является программа find : GNU find обходит каждый файл из дерева директорий, подставляя его имя в заданное выражение и проводит вычисление значения выражения слева до получения результата (правая часть выражения ложна для операции логического «и», истинна для логического «или»), на основании которого find принимает решение о выполнении заданного действия и переходит к рассмотрению следующего имени файла.

Программа find может принимать различные аргументы командной строки для создания выражения поиска, а стандартным действием при обнаружении файла с именем, удовлетворяющим выражению, является печать имени файла.

Перед тем, как как привести полезные примеры использования программы find с параметром exec , рассмотрим немного теоретических положений.

Параметры программы find

Наиболее известными параметрами для поиска файлов при помощи программы find , являются:

-name выражение Это наиболее часто используемый параметр для поиска файлов, имена которых (без учета предшествующих им директорий) удовлетворяют заданному выражению.

-mtime n Файлы были изменены n*24 часов назад.

  • ‘b’ для блоков по 512 байт (используется по умолчанию если суффикс не задан)
  • ‘c’ для байт
  • ‘w’ для двухбайтовых слов
  • ‘k’ для Килобайт (единицы размером в 1024 байта)
  • ‘M’ для Мегабайт (единицы размером в 1048576 байт)
  • ‘G’ для Гигабайт (единицы размером в 1073741824 байт)

-uid n Системный числовой идентификатор пользователя-владельца файла должен быть равен n .

Действия

При использовании find есть возможность для указания действий, которые будут выполнены при нахождении файла с именем, удовлетворяющим выражению поиска, а наиболее гибким вариантом, без сомнения, является использование параметра exec .

-exec команда; Выполнить команду; выполнение считается успешным в случае статуса выхода, равного нулю. Все символы, следующие за командой, считаются ее аргументами до того момента, как встречается символ «;» . Строка «<>» заменяется на имя рассматриваемого файла каждый раз, когда она встречается среди аргументов команды.

Примеры использования find с параметром exec

Поиск файлов и удаление их при помощи параметра exec является часто встречающимся вариантом использования этого параметра, но вам не нужно использовать exec для этих целей, так как более удачный вариант будет описан позднее.

find / -name "*.old" -exec /bin/rm <> \;
find / -size +100M -exec /bin/rm <> \;

Бывают и такие случаи, что программы «сходят с ума» и заполняют директории тысячами мелких файлов, при этом вы не сможете просто использовать команду rm * по той причине, что командная оболочка не в состоянии заменить символ * на имена всех этих файлов, зато в состоянии удалить эти файлы по очереди:

Читайте также:  Linux узнать размеры всех директорий

Помните, что вы не должны использовать эти примеры, поскольку для удаления файлов у GNU find есть параметр -delete , более безопасный, нежели «-exec /bin/rm <>;» . Пример использования:

В старых системах Unix у вас не будет возможности использовать параметр -delete , поэтому альтернатив параметру -exec для удаления файлов в них не остается.

А теперь рассмотрим некоторые другие примеры использования программы find с параметром exec .

find ./ -type f -exec chmod 644 <> \;

При помощи параметра -type f вы можете вести поиск только файлов и просто изменять права доступа к каждому из них при помощи chmod .

find / -user olduser -type f -exec chown newuser <> \;

В этом примере я использовал параметр -user как альтернативу параметру -uid .

find . -type d -exec chmod 755 <> \;

В этом примере я снова использовал параметр -type , но на этот раз с аргументом d для поиска директорий.

Заключение

Как вы убедились, в приведенных выше примерах показано то, что использование программы find с параметром exec позволяет вам выполнять довольно сложные задачи, при этом то обстоятельство, что вы можете выполнять заданное действие только над частью файлов, ставит вас в выигрышное положение.

Источник

Linux: Set permission only to directories [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.

I have to change the permissions of the htdocs directory in apache to a certain group and with certain read/write/execute. The directories need to have 775 permissions and the files need to have 664. If I do a recursive 664 to the htdocs , then all files and directories will change to 664. I don’t want to change the directories manually. Is there any way to change only files or directories?

7 Answers 7

chmod can actually do this itself; the X symbolic permission means «execute, if it makes sense» which generally means on directories but not files. So, you can use:

chmod -R u=rwX,go=rX /path/to/htdocs 

The only potential problem is that if any of the plain files already have execute set, chmod assumes it’s intentional and keeps it. If this is a potential problem and you have the GNU version of chmod (i.e. you’re on Linux), you can get it to remove any stray execute permissions like this:

chmod -R a-x,u=rwX,go=rX /path/to/htdocs 

Unfortunately, this trick doesn’t work with the bsd (/macOS) version of chmod (I’m not sure about other versions). This is because the bsd version applies the X permission based on «the original (unmodified) mode», i.e. whether it had any execute bits before the a-x modification was done (see the man page).

Источник

Оцените статью
Adblock
detector