Цифровой садик - приветственная

Цифровой садик - приветственная | Полный список всего, что тут есть | RSS | Подписаться через follow.it

20.02.2022

find

Некоторые полезняшки про одну из базовых штук.

Перекодировать многа файлов

find ./ -type f -exec bash -c 'enconv "{}"' \;

или, если те, что с конкретным расширением, и другим способом скармливая имена (чтоб не бояться, скажем, кавычки в имени файла):

find ./ -iname \*.txt -print0 | xargs -0 -n 1 enconv

Опция -exec для выполнения команд. Как и xargs, умеет подставлять имя найденного файла на место «{}». Вариант -execdir позволяет запускать команду из каталога, где находится файл (так, мне было существенно для unrar, чтоб файл разархивировался туда, где лежал архив, а не туда, откуда запущен find).

«\;» после -exec - не обязательно конец общей команды, можно добавлять ещё -exec, можно добавлять другие варианты операций. А вот объединять команды через && или & - не срабатывало.

find ./ -iname \*.txt -exec enconv "{}" \; -print

или

find ./ -iname \*.rar -execdir unrar e -y "{}" \; -print -delete

Найти в папке муз все файлы mp3 и обработать их mp3gain, причём на все вопросы mp3gain отвечать "нет".

find ~/mus -iname '*mp3' -exec mp3gain -r '{}' <~/bin/no \;

Удалить пустые папки

sudo find /library/filosofia/ -type d -empty -delete

Замена во многих файлах

Собстно замена

awk '{sub(/blue/,"azure")}1' input.txt
sed 's/blue/azure/' input.txt
perl -ne 's/blue/azure/;print $_' input.txt
perl -i -pe 's/foo/bar/g' ./*

(perl - так, к слову)

find по мотивам соседнего:

find ./ -iname \*.fb2 -print0 | xargs -0 -n 1 sed -n -i 's/encoding="windows-1251"/encoding="utf-8"/'

Если нужны бэкапы, то после -i идёт желаемый суффикс бэкапного файла.

Обнуляет файлы нафиг, если поставить кавычки после -i ((

Разгребать старое файло

find ./ -type f -atime +2500 > atimemore2500.txt

Что самое ужасное - такой поиск на 19 июня 2017 года дал результаты ) В смысле, у меня на жёстком диске таки реально были файлы с последним временем доступа больше 2500 дней. Вот настолько ненужные…

Надеюсь, постепенно получится уменьшить такое время-без-внимания.

find в полном объёме умеет работать со временем, позволяя искать по времени последнего доступа к файлу (-atime), времени последнего изменения файла (-mtime), или по времени его создания (-сtime). Специальные опции -amin, -cmin, -mmin, которые работают подобно выше рассмотренным, с той разницей, что в качестве параметров они принимают минуты, а не сутки.

Удалить файл со всеми хардлинками на него

find /home -xdev -samefile file1 -delete

или с пайпом и xargs

find /home -xdev -samefile file1 -print0 | xargs -0 rm

Обработать все файлы в папке

При необходимости перебрать все файлы в каком-либо каталоге и выполнить над ними какие-либо действия, можно воспользоваться простым однострочным циклом:

for file in /etc/config/*; do wc -l $file; stat -c %s $file; done

Можно использовать и find для рекурсивного поиска и дополнительных фильтров:

for file in `find /etc -type f -name "*.conf"`
do
   wc -l $file;
   stat -c %s $file;
done

Если выполняется не более одного действия над файлом, можно обойтись без цикла:

find /etc -type f | xargs wc -l

Если в именах файлов есть пробелы, то добавляем к find параметр -print0:

find /etc -type f -print0 | xargs -0 wc -l

Во всех примерах вычисляется количество строк в файлах. http://tt.erinome.net/2013/03/468

Или без пайпа, c exec. Переименовать файлы в папке и подпапках:

find ./ -name "*.abc" -exec rename 's/\.abc$/.edefg/' {} +

Альтернатива для find - fd

While it does not seek to mirror all of find's powerful functionality, fd provides sensible (opinionated) defaults for 80% of the use cases.

Features:

  • Convenient syntax: ‘fd PATTERN’ instead of ‘find -iname 'PATTERN'’.
  • Colorized terminal output (similar to ls).
  • It's fast, often faster than find.
  • Smart case.
  • Ignores hidden directories and files, by default.
  • Ignores patterns from your .gitignore, by default.
  • Regular expressions.
  • Unicode-awareness.
  • Parallel command execution with a syntax similar to GNU Parallel.

Please note: the executable and the associated manpage were renamed from ‘fd’ to ‘fdfind’ because of a file name clash.

Домашняя страница: https://github.com/sharkdp/fd


Если у вас есть мысли, комментарии, предложения или отклики по поводу этой страницы или этого цифрового сада в целом, напишите мне сообщение на agnessa@agnessa.pp.ru. Мне ооочень интересно!

Задонатить.


An IndieWeb Webring 🕸💍