find command, есть ли способ получить отчет о проделанной работе?

во-первых, прошу простить мою нехватку знаний об Unix – вот почему я здесь в конце концов. Я создал AppleScript, который ищет файлы на Mac и значительно улучшил скорость, используя следующую команду:

set MySubfolderTextList to do shell script "find " & MyDirectory & " -type d" 

В простой Unix, которая find MyDirectory -type d

Это дает мне список каждой вложенной папки, рекурсивный, начиная с верхнего уровня папки MyDirectory . Теперь скорость этого удивительна по сравнению со старой рутиной, которую я сделал с помощью обычного AppleScript, но дело в том, что когда я запускаю этот скрипт в папке с тысячами подкаталогов, я получаю небольшой пляжный мяч в течение нескольких секунд или минут, что указывает на то, что либо что-то происходит, либо система разбилась. Я надеялся, что я смогу получить некоторые отзывы от Unix о ходе поиска, иначе мои клиенты будут волноваться, что программа потерпела крах.

На самом деле, нет. Учтите, что find не знает, что находится в дереве каталогов, но обнаруживает это путем чтения рекурсивно через весь список каталогов. (извините за каламбур). Например, могут быть два каталога первого уровня, один из которых имеет 1 файл, а другой – 1000000 файлов.

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

Теперь, что касается пляжного мяча и впечатления от замерзания, вы выполняете подпроцесс синхронно, чтобы пользовательский интерфейс блокировался во время его запуска? Обычно это плохая идея, и вам может понадобиться искать способы запуска внешней программы в фоновом режиме, показывая хорошее сообщение «Все еще поиск …». С возможностью прерывания поиска, если пользователь получает нетерпение.

Вы можете использовать команду pv если у вас есть возможность подсчета строк. Например

  find ~ -type d | pv -l -F '%b dirs found' >/tmp/output