Вот проблема, может кто-нибудь объяснить или дать ссылки. Я пытаюсь читать уже час, но не могу найти ответ.
Предположим, у меня есть процесс 1, работающий с пулом каталогов. Процесс 1 выбирает каталог и создает в нем, скажем, файлы .csv. Файлы .csv добавляются и, следовательно, являются неполными, пока процесс 1 продолжает работу с этим, скажем, каталогом 1. Затем процесс 1 переходит к каталогу 2 и так далее.
Теперь я хочу что-то сделать с csv в каталогах, с которыми закончил работу process1. В идеале я должен проверить, с какими каталогами закончил работу, и запустить process2 на них. Но в своей бесконечной мудрости я делаю так:
найти каталоги* -type f -name '*.csv' -exec процесс2
Я предполагал, что find сначала найдет все csv-файлы, существовавшие до момента вызова find, а затем выполнит -exec process2 только для них, игнорируя любые csv-файлы, которые будут созданы после вызова find.
Кажется, я ошибся (до сих пор не уверен). Может кто-нибудь объяснить, пожалуйста?
Спасибо.
решение1
Способ find
работы с -exec заключается в том, что процесс exec вызывается по мере нахождения каждого файла. Если вы хотите работать со снимком, вам, вероятно, лучше сделать что-то вроде этого:
find directories* -type f -name '*.csv' > /tmp/filelist
cat /tmp/filelist | while read file; do
process2 $file # I'm assuming you want to pass the filename somehow...
done;
Опять же, вы по-прежнему не знаете, в какие из них на самом деле ведется запись, поэтому вам придется решать этот вопрос отдельно.