Описание тега 7-wonders-babel
найти ~/ -тип F -print0 команды 2>/dev/нуль |
на awk -Ф/ 'начать {РС=ОРС="\0"};
{
д=генсуб("/[^/]*$","",1);
видел[д]++;
если ($НФ ~ /\.ТМП$|^(рабочий стол\.Ини|палец\.дБ|\.\в Picasa.Ини)$/) {
нашли[д]++;
};
};
Конец {для (г В видел) { если (видно[д] == нашли[д]) {печати д}}}'
Это использует найти
просто выход нуль-завершенной список файлы (и только файлы, -типа F
) или ниже целевой каталог (~/
) и передать их в сценарий awk. На 2>/Дев/нуль
, чтобы избавиться от предупреждения, найти
, если/когда пользователь не имеет разрешения, чтобы спуститься на несколько подкаталогов.
Сценарий awk использует /
в качестве разделителя полей и устанавливает входные (РС) и вывода (ОРС) запись сепараторы в Nul. Он извлекает корневую часть имени файла из входной записи и подсчитывает, сколько раз этот каталог был замечен (используя ассоциативный массив видел
). Затем, если в последнем поле ($НФ) совпадает с одной из нужные именем модели, он продолжает считать матчей (с помощью ассоциативных arrray нашли
).
После того как все входные данные не будут обработаны, он распечатывает каждый каталог, где количество каталогов было видно, равно количеству найденных совпадений для этого каталога.
т. е. он печатает только каталоги, содержащие только соответствующие файлы.
Потому что ОРС-это нуль, на выходе это может быть безопасно использованы в качестве входных данных для команды xargs -0г РМ -РФ
или аналогичную команду, без риска возникновения проблем из-за пробелов, символов перевода строки или другие проблемные раковины мета-символов в имени каталога.
Выход может быть дополнительно обработан с помощью любого инструмента или язык сценариев, который может работать с нуль-отдельный вход, в том числе на Perl
и GNU версии СЭД
, вроде
, например
, голову
, хвост
и многое другое. Во многих случаях, вы, вероятно, лучше либо настройки найти
варианты или делать дополнительную обработку в на awk
скрипт (или просто переписав все дело в языке Perl
с использованием файл::найти
модуль).
Кстати, если вы еще не доработан, какой именно пост-обработка (если таковые имеются), которые вы хотите сделать в каталоге список, перенаправление выход найти ... | awk и ...
в файл полезен, потому что найти
работу очень требовательна дискового ввода/вывода, используя файл в качестве входных данных для дальнейшей обработки во избежание многократного работает так, чтобы обеспечить один и тот же вход (т. е. это кэш).
Наконец, если вы хотите визуально проверьте результат (например, чтобы убедиться, что вы не собираетесь, чтобы удалить что-нибудь важное), изменить интерфейс RS=ОРС="\0"
линии интерфейса RS="\0"
, поэтому вы получаете перевода строки между каждой директории имя. Это не может быть безопасно использоваться в качестве входных данных для команды xargs
, потому что там линия-кормит являются допустимыми символами в Unix файл/каталог фамилий.