- 10 find exec multiple commands examples in Linux/Unix
- Find exec multiple commands syntax
- Find exec example 1: Collect md5sum
- Find exec example 2: Remove files older than certain time
- Find exec example 3: Rename files
- Combine find exec multiple commands
- Combine find exec with grep in Linux or Unix
- Combine find exec grep print filename
- Combine find exec shell script function
- Combine find exec with pipe
- Combine grep and find exec with sed
- Combine find exec grep with cut or awk
- Related Posts
- Как переименовать папку Linux
- Как переименовать папку в Linux
- 1. Файловый менеджер
- 2. Команда mv
- 3. Команда rename
- 4. Скрипт Bash
- 5. Команда find
- 6. Утилита gio
- Выводы
- Как получить команду find и rename для работы с подкаталогами?
- Bash переименовывает 360 000 файлов с помощью find -exec
10 find exec multiple commands examples in Linux/Unix
Table of Contents
In this article I will share multiple find exec examples. Find is a very helpful utility for every system admin for day to day tasks but you can also combine find exec multiple commands to filter and execute certain tasks. For example: find exec grep a pattern and print only patching files, use find exec with pipe, combine fix exec with sed or awk in Linux or Unix.
Find exec multiple commands syntax
The -exec flag to find causes find to execute the given command once per file matched, and it will place the name of the file wherever you put the <> placeholder. The command must end with a semicolon, which has to be escaped from the shell, either as \; or as » ; «.
Syntax to be used for find exec multiple commands:
Find exec example 1: Collect md5sum
In this find exec example find all files under /tmp and collect md5sum for each file
Here, -type f means look out for regular file
Similarly you can find exec multiple commands to collect sha512sum or sha256sum for all file with find command. In the same find exec example to store the output to a file
Find exec example 2: Remove files older than certain time
In the below find exec example we will list files older than 5 days
To remove files older than 5 days
Here -mtime means file’s data was last modified n*24 hours ago
Find exec example 3: Rename files
We use mv command to rename files, we can use this with find and exec to rename multiple files
This command we use find exec to rename files where the found files are stored in <> and then the same are renamed with _renamed extension
Combine find exec multiple commands
We can combine find exec multiple commands in one line. find will continue to run one by one as long as the entire chain so far has evaluated to true. So each consecutive -exec command is executed only if the previous ones returned true (i.e. 0 exit status of the commands).
Combine find exec with grep in Linux or Unix
You can combine find exec grep if you wish to look for files with certain content so use find exec grep. For example below I need the list of files which has string » deepak » using find exec grep. But find exec grep print filename didn’t work here as we only get matched string
Combine find exec grep print filename
Now in the above command we get a list of output from files which contains deepak string. But it does not print filename. Here with find exec grep print filename using different methods: In the below example we will combine find exec print filename
Alternatively you can also use below commands to combine find exec grep print filename:
Combine find exec shell script function
We can combine find exec shell script function. In the below example I will combine find exec shell script function to rename a file if found
Follow pattern matching for more details
Combine find exec with pipe
We can combine find exec with pipe. You can also use multiple pipes with find exec grep multiple commands and string. In the below example I am going to combine find exec with pipe multiple times:
Combine grep and find exec with sed
You can combine find exec with sed or with awk, In the below example we combine grep and find exec with sed
- we find all the files under /tmp/dir1
- grep for deepak in all the files which were found under /tmp/dir1
- print the output on STDOUT
- Use sed and replace deepak with deep
Combine find exec grep with cut or awk
In the below example we will combine find exec grep with cut but in the same command you can combine find exec grep with awk
Lastly I hope the steps from the article to find exec multiple commands in Linux or Unix was helpful. So, let me know your suggestions and feedback using the comment section.
Related Searches: find exec multiple commands, find exec grep print filename, find exec example, find exec with pipe, find exec with sed. find exec shell script in Linux or Unix
Related Posts
Didn’t find what you were looking for? Perform a quick search across GoLinuxCloud
If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.
For any other feedbacks or questions you can either use the comments section or contact me form.
Thank You for your support!!
Источник
Как переименовать папку Linux
Переименовать папку в Linux не намного сложнее, чем переименовать файл. Вы можете сделать это в графическом интерфейсе или с в терминале с помощью нескольких команд. Как и для других задач в Linux для этой существует множество способов решения.
Можно переименовать не просто одну папку, а выбрать стразу несколько и настроить для них массовое переименование. Вы можете использовать команду mv, rename, а также утилиту find для массового переименования. Но сначала давайте поговорим о том как всё это сделать в файловом менеджере.
Как переименовать папку в Linux
1. Файловый менеджер
Самый простой способ переименовать папку — в файловом менеджере. Например, для Ubuntu это Nautilus. Откройте файловый менеджер и кликните правой кнопкой мыши по нужной папке. В контекстном меню выберите Переименовать:
Затем просто введите новое имя:
После нажатия клавиши Enter папка будет переименована.
2. Команда mv
Команда mv предназначена для перемещения файлов в другое место, однако её можно без проблем использовать чтобы переименовать папку или файл не перемещая его никуда. По сути, если файл или папка перемещается в пределах одного раздела диска, то на самом деле они просто переименовываются, а физически остаются на том же месте. Синтаксис:
$ mv старое_имя новое_имя
Чтобы переименовать папку
/Музыка/Папка 1 в Папка 11 используйте:
Если в имени файлов есть пробелы, то путь к файлу следует взять в кавычки. После выполнения этой команды папка будет переименована:
Обратите внимание, что слеш в конце папки назначения писать нельзя, иначе, ваша папка будет перемещена в указанную папку, если такая существует.
3. Команда rename
Команду rename можно использовать аналогично mv, только она предназначена специально для переименования файлов и папок поэтому у неё есть несколько дополнительных возможностей. Синтаксис команды следующий:
$ rename регулярное_выражение файлы
Но прежде всего программу надо установить:
sudo apt install rename
Самый простой пример, давайте заменим слово «Папка» на «Dir» во всех папках:
Можно пойти ещё дальше и использовать регулярное выражение чтобы заменить большие буквы в названиях на маленькие:
Чтобы не выполнять действия, а только проверить какие папки или файлы собирается переименовывать команда используйте опцию -n:
4. Скрипт Bash
Для массового переименования папок можно использовать скрипт на Bash с циклом for, который будет перебирать все папки в директории и делать с ними то, что нужно. Вот сам скрипт:
#!/bin/bash
for dir in *
do
if [ -d «$dir» ]
then
mv «$
fi
done
Этот скрипт добавляет слово _new для всех папок в рабочей директории, в которой был он был запущен. Не забудьте дать скрипту права на выполнение перед тем, как будете его выполнять:
chmod ugo+x dir_rename.sh
5. Команда find
Массовое переименование папок можно настроить с помощью утилиты find. Она умеет искать файлы и папки, а затем выполнять к найденному указанную команду. Эту особенность программы можно использовать. Давайте для всех папок, в имени которых есть dir добавим слово _1. Рассмотрим пример:
find . -name «Dir*» -type d -exec sh -c ‘mv «<>» «<>_1″‘ \;
Утилита ищет все папки, в имени которых есть слово Dir, затем добавляет с помощью mv к имени нужную нам последовательность символов, в данном случае единицу.
6. Утилита gio
Утилита gio позволяет выполнять те же действия что и с помощью обычных утилит mv или rename, однако вместо привычных путей, можно использовать пути GVFS. Например: smb://server/resource/file.txt. Для переименования папки можно использовать команду gio move или gio rename. Рассмотрим пример с move:
Переименование папки Linux выполняется аналогично тому, как это делается с помощью mv.
Выводы
В этой небольшой статье мы рассмотрели как переименовать папку Linux. Как видите, для этого существует множество способов и всё делается достаточно просто.
Источник
Как получить команду find и rename для работы с подкаталогами?
Возможный дубликат:
Рекурсивные файлы и каталоги переименования
У меня есть большой каталог музыкальных файлов, которые часто меняются, когда файлы и каталоги приходят и уходят. Мое предпочтение состоит в том, чтобы убедиться, что имена файлов и каталогов не содержат пробелов, поэтому я заменяю их символами подчеркивания.
Я захожу в основной каталог и запускаю эту команду:
Проблема в том, что когда есть подкаталоги, эта команда, кажется, теряется и возвращает ошибки. Поэтому, если у меня есть следующая структура каталогов:
… и если я запустил команду, то получаю следующие ошибки:
И тогда результат заключается в том, что моя структура каталогов выглядит так. Обратите внимание, что в подкаталогах по-прежнему есть пробелы:
Если я снова запустил команду, я получу эти ошибки, хотя кажется, что, возможно, она переименовала указанные каталоги:
Наконец, я запускаю команду еще один раз, и у меня нет ошибок, и у меня есть все каталоги и подкаталоги, названные так, как я хочу:
Очевидно, что это требует выполнения команды еще больше раз, когда у меня есть несколько подкаталогов, которые могут стать утомительными.
Как я могу сделать так, чтобы эта команда запускалась только один раз, и она будет переименовывать все каталоги и подкаталоги за один раз?
Моя конечная цель – включить это в сценарий Bash, чтобы я мог запускать его вместе с другими подобными командами, поэтому мне нужно, чтобы они не возвращали ошибки или не нуждались в большем количестве ввода от меня. Кроме того, я запускаю Ubuntu 12.04, если это имеет значение.
Вот что происходит:
- find находит соответствующий каталог ./Test 02 .
- find выполняет команду rename в этом каталоге.
- rename переименовывает Test 02 в Test_02 .
- find пытается спуститься в каталог Test 02 . Но этого больше нет.
Самый простой способ решить эту проблему – сказать, что find для работы наоборот: сначала найдите совпадения внутри каталога, а затем проверьте, совпадает ли сама директория. Это то, что -depth опция -depth .
Если вы добавите только -depth , вы -depth другой проблемой, которая заключается в том, что при find достигает Test 01/Test A , он вызывает rename ‘y/\ /\_/’ ‘Test 01/Test A’ , который пытается переименуйте этот каталог в Test_01/Test_A . Это не сработает, поскольку нет директории с именем Test_01 . -execdir исправление заключается в использовании опции -execdir , которая вызывает rename внутри каталога Test 01 и передает Test A в качестве аргумента. Вы можете ускорить процесс, передав несколько аргументов для rename в одну партию, используя + вместо ; для завершения команды -execdir .
Кроме того, используйте эту короткую, но загадочную команду zsh:
Функция zmv переименовывает файлы в соответствии с шаблонами. Исходный шаблон – **/* , который соответствует всем файлам ( * ) во всех подкаталогах рекурсивно ( **/ ). Квалификаторы glob (активированные параметром -Q ) указывают, что только каталоги сопоставлены ( / ), и эти точечные файлы включены ( D ). Параметр -w создает обратную ссылку для каждого шаблона шаблона источника. Замена начинается с $1 которая обозначает совпадение для первого шаблона (для ** , это включает в себя final / ), за которым следует $ <2>, который равен $2 (что соответствует * совпадению) для замены все пробельные символы _ . Добавьте опцию -v чтобы увидеть, что делает команда, вы заметите, что она сначала пересекает глубину, как find -depth .
Источник
Bash переименовывает 360 000 файлов с помощью find -exec
У меня около 360 000 файлов, таких как:
Я хочу переименовать файлы с помощью rename например, с * .jpg до * .jpeg. Я не могу сделать это с единственным rename , потому что я получаю список аргументов ошибки слишком длинным.
В поисках решения я понял это, но он ничего не переименовывает:
find -maxdepth 2 -mindepth 2 -type d -exec rename -n ‘s/jpg/jpeg/’ <>/* \;
Когда я проверю, если <> расширена, заменив rename на echo:
find -maxdepth 2 -mindepth 2 -type d -exec echo «rename -n ‘s/jpg/jpeg/’ <>/*» \;
Я получаю ожидаемый результат:
Если я запустил любую из этих команд переименования, я переименую работу. Поэтому проблема с <> .
Спасибо за помощь!
или если у вас есть другие файлы в каталоге currunt
В первом случае * расшифровывается оболочкой до того, как она rename (если она вообще расширена), я сомневаюсь, что что-то соответствует <>/* ), и если она не расширена, команда, которая выполняется, rename три аргумента -n , s/jpg/jpeg/ и some/path/* . Этот последний аргумент не является именем существующего файла, поэтому rename ничего не делает.
Без перекоса оболочки путь бесполезен для rename .
Итак, вместо этого выполните:
Использовать способность find для построения командной строки до тех пор, пока это возможно с помощью + вместо ; ,
Вот альтернативный способ rename :
Вы не должны указывать type d если вы не хотите переименовывать только каталоги. Чтобы изменить расширения .jpg на .jpeg попробуйте
Удалите echo если вам нравится то, что вы видите на экране.
Используя cygwin, моя версия переименования не имеет замены регулярного выражения, равно как и ее rename [options] expression replacement file. синтаксис, похоже, работает. Кроме того, предложения bash терпят неудачу
Источник