У меня есть папка с подпапками в нем. Я пытаюсь циклично выполниться по каждой подпапке и импортировать 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.С уважением
Вы не сослались" dir
" от Вашего for
строка в Вашем do
строка, таким образом, удар не знает, где искать *.json
файлы, которые находятся в "$dir"
, Вы могли упростить, просто соответствуя файлам:
for jsonfile in /data/Mydata/*/*.json ;
do
mongoimport --db MyApp --collection logs --file "$jsonfile" --type json
done;
И благодарен за то, что @terdon фиксирует это так, Вы не должны анализировать ls, который является , очень плохая идея - избегает этого в будущем!
Я думаю эти 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
, который ограничивает результат находки файлами, я воображаю Вас, привычка имеет любые каталоги, названные как это, но это - просто предосторожность