2013-04-22 49 views
0

我使用下面的腳本(Source)加密一些資源在我的可可應用程序:加密可可資源使用自定義生成Shell腳本

DIRNAME=EncryptedResources 
ENC_KEY="abcdefghijklmnopqrstuvwxyz123456" 

INDIR=$PROJECT_DIR/$DIRNAME 
OUTDIR=$TARGET_BUILD_DIR/$CONTENTS_FOLDER_PATH/$DIRNAME 

if [ ! -d "$OUTDIR" ]; then 
    mkdir -p "$OUTDIR" 
fi 

for file in "$INDIR"/* 
do 
    echo "Encrypting $file" 
    "$PROJECT_DIR/crypt" -e -k $ENC_KEY -i "$file" -o "$OUTDIR/`basename "$file"`" 
done 

不過劇本不處理EncryptedResources目錄中的子目錄。我有幾個嵌套的子目錄,那麼修改shell腳本以處理子目錄並正確輸出這些內容的最簡單方法是什麼?

回答

1

您需要使用find命令而不是for循環。

find $INDIR -exec "$PROJECT_DIR/crypt" 
    -e -k $ENC_KEY -i {} -o "$OUTDIR/`basename {}`" \; # all on one line 

可能是你需要做的一個很好的近似,但find是非常難用,而且我從內存的工作。

+0

謝謝!我以此爲出發點。我最終運行find $ INDIR -type f並將結果放入一個數組,然後修改一些路徑等。 – Luke 2013-04-22 06:28:05

+0

'xargs'命令也很有幫助。 – 2013-04-22 10:20:21

+0

@Luke你能解釋一下你是如何得到這個的?我也面臨同樣的問題。 – NewStack 2013-06-05 10:37:49

0

僅供參考我使用了以下內容:

DIRNAME=ENCRYPTEDCONTENT 
ENC_KEY="INSERT ENCRYPTION KEY HERE" 

INDIR=$PROJECT_DIR/$DIRNAME 
OUTDIR=$TARGET_BUILD_DIR/$CONTENTS_FOLDER_PATH/Resources/$DIRNAME 

if [ ! -d "$OUTDIR" ]; then 
mkdir -p "$OUTDIR" 
fi 


while IFS= read -r -d $'\0' dir; 
do 
DIRECTORY=`echo $dir | sed -e "s,$INDIR,$OUTDIR,g"` 
mkdir -p "$DIRECTORY" 
done < <(find "$INDIR" -type d -print0) 

while IFS= read -r -d $'\0' file; 
do 
OUTFILE=`echo $file | sed -e "s,$INDIR,$OUTDIR,g"` 
if [ ! -d "$file" ]; then 
echo "Encrypting $file" 
"$PROJECT_DIR/crypt" -e -k $ENC_KEY -i "$file" -o "$OUTFILE" 
fi 
done < <(find "$INDIR" -type f -print0) 
+0

當我運行這個腳本時,我得到這個錯誤 - crypt:Key必須是32個字節 – 2016-01-02 02:04:11

相關問題