Цикл по json файлам в подкаталогах

У меня есть папка с подпапками в нем. Я пытаюсь циклично выполниться по каждой подпапке и импортировать json файлы в базе данных монго:

#!/bin/bash
for dir in /data/Mydata/*/; 
do
    ls -1 *.json | while read jsonfile; 
    do 
        mongoimport --db MyApp --collection logs --file $jsonfile --type json
        done;
done;

Но это дает мне ошибку:

ls: cannot access *.json: No such file or directory

Если я в каждом подкаталоге и делаю:

ls -1 *.json | while read jsonfile; 
do 
    mongoimport --db MyApp --collection logs --file $jsonfile --type json
done;

Работает.

Что я делаю неправильно? Я довольно плохо знаком с Ubuntu.С уважением

3
задан 12 September 2016 в 10:44

2 ответа

Вы не сослались" dir" от Вашего for строка в Вашем do строка, таким образом, удар не знает, где искать *.json файлы, которые находятся в "$dir"

, Вы могли упростить, просто соответствуя файлам:

for jsonfile in /data/Mydata/*/*.json ; 
do
    mongoimport --db MyApp --collection logs --file "$jsonfile" --type json
done;

И благодарен за то, что @terdon фиксирует это так, Вы не должны анализировать ls, который является , очень плохая идея - избегает этого в будущем!

6
ответ дан 1 December 2019 в 13:05

Я думаю эти find, команда должна достигнуть Вашей цели, сценарий стал бы:

#!/bin/bash

find /data/Mydata/ -maxdepth 2 -mindepth 2 -iname "*.json" -type f -exec mongoimport --db MyApp --collection logs --file "{}" --type json \;

Это только получит доступ к прямым подкаталогам /data/Mydata, из-за maxdepth и mindepth настройки. "{}" расширен до названия файла, найденного каждый раз, и эти mongoimport, команда выполняется каждый раз, когда файл найден.

я обеспечил, чтобы эти mongoimport команда не работала ни на каких каталогах, которые можно назвать something.json при помощи -type f, который ограничивает результат находки файлами, я воображаю Вас, привычка имеет любые каталоги, названные как это, но это - просто предосторожность

5
ответ дан 1 December 2019 в 13:05

Другие вопросы по тегам:

Похожие вопросы: