读取MongoDB结果并在SH shell脚本中使用以创建符号链接

时间:2015-01-27 22:13:56

标签: mongodb shell ubuntu sh

我有一个 MongoDB 集合,其中包含用于演示的虚拟数据。 我在名为example.jpg的文件夹中有一个图像文件 对于集合中的每个ID,我想创建一个从ID.jpg到example.jpg

的符号链接

例如,如果该集合包含3个文件,其中包含345kjh34k5,8945ng49和3459t8u34的ID,我想创建345kjh34k5.jpg,8945ng49.jpg和3459t8u34.jpg的3个符号链接,这些都指向example.jpg

谢谢!

1 个答案:

答案 0 :(得分:2)

你想创建一个mongo脚本打印id,然后有一个bash脚本循环遍历它并为每个id创建一个链接。

这是一些代码。

设置 - 创建Mongodb Dummy集合

db = connect("test");
db.dummy.insert({ _id : "345kjh34k5" });
db.dummy.insert({ _id : "8945ng49" });
db.dummy.insert({ _id : "3459t8u34" });

设置 - 创建示例文件

文件名:file1.txt

File1 content. Blah blah blah.

MongoDB脚本打印虚拟ID

文件名:printDummyIds.js

db = connect("test");
var linkNames = db.dummy.find().map(function(doc){
        print( doc._id );
});

输出:

mongo --quiet printDummyIds.js 
345kjh34k5
8945ng49
3459t8u34

调用mongo的Bash脚本然后创建软链接

文件名:createLinksFromIds.sh

echo Linking files to source.
echo Source: $1
ext="${1#*.}"
out="./out/"
mkdir $out
for id in $(mongo --quiet printDummyIds.js) 
do 
    lName=$out$id"."$ext ;
    echo Creating $lName ;
    ln -s $1 $lName ;
done

用法

createLinksFromIds.sh FILE_PATH
FILE_PATH is the file that you want to link.

示例:

bash createLinksFromIds.sh file1.txt

输出:

Linking files to source.
Source: file1.txt
Creating ./out/345kjh34k5.txt
Creating ./out/8945ng49.txt
Creating ./out/3459t8u34.txt