Вот проблема, может кто-нибудь объяснить или предоставить некоторые ссылки. Я пытаюсь читать с часа, но не могу найти ответ.

Предположим, у меня process1 идет по пулу каталогов. process1 выбирает каталог и создает, скажем, файлы .csv внутри него. Файлы .csv добавляются и, следовательно, являются неполными, пока процесс1 продолжается в этом, скажем, каталоге1. Затем процесс1 переходит в каталог2 и так далее.

Теперь я хочу сделать что-то с csvs в каталогах, с которыми процесс1 закончил. В идеале я должен проверить, с какими каталогами покончено, и запустить на них process2. Но в моей бесконечной мудрости я делаю это:

найти каталоги * -type f -name '* .csv' -exec process2

Я предполагал, что find сначала найдет все существующие csv до момента вызова find, а затем -exec process2 только для них, игнорируя все csv, которые будут созданы после вызова find.

Кажется, я был неправ (до сих пор не уверен). Может кто-нибудь объяснить, пожалуйста?

Благодарю.

1 ответ1

2

Метод 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;

Опять же, вы до сих пор не знаете, к какому из них на самом деле пишут, поэтому вы должны решить это отдельно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .