2017-02-10 28 views
0

下面是我正在爲媒體備份工作的腳本的片段。當從終端命令行調用腳本時,腳本按預期運行。但是,在將Platypus腳本包裝到應用程序後,將創建目標目錄,但For循環不會運行,並且沒有介質複製到目標文件夾。任何人都知道我在這裏做錯了嗎?用於與鴨嘴​​獸包裝後的循環休息

#!/bin/sh 

DEST_PATH=/Volumes/MediaBackup 
mkdir -p $DEST_PATH  
SAVEIFS=$IFS 

IFS=$(echo -en "\n\b") 

for i in $(find "$PWD" -iname "*.jpg")  
do  
    FILENAME="$(basename $i)" 
    MD5="$(md5 -q $i)" 
    cp "$i" "$DEST_PATH/$MD5-$FILENAME" 
done 

IFS=$SAVEIFS 

溫柔的男人和/或女士們,謝謝!以下是使用您的評論的工作腳本。感謝您快速轉身。應該在這之前完成。

#!/bin/bash 

DEST_PATH=/Volumes/PrivateMain/Media 
mkdir -p $DEST_PATH 
SAVEIFS=$IFS 

IFS=$(printf "\n\b") 

for i in $(find "/Users" -iname "*.jpg") 
do 
FILENAME="$(basename $i)" 
MD5="$(md5 -q $i)" 

cp "$i" "$DEST_PATH/$MD5-$FILENAME" 

done 

IFS=$SAVEIFS 
+0

鴨嘴獸是否有可能改變你目前的工作目錄?你明確地命名了輸出目錄,所以對於將要去的地方沒有歧義,但是'$ PWD'要改變,你可能會在'find'變空的地方。 –

+1

可能不相關,但請參閱[Bash FAQ 001](http://mywiki.wooledge.org/BashFAQ/001),以獲得迭代find'輸出的正確方法。 – chepner

+0

聽起來好像你正在用'bash'從命令行運行你的腳本,但它正在Platypus-wrapped版本的'/ bin/sh'中運行。在每種情況下,echo都會有不同的表現。 (也就是說,'-e'被'/ bin/sh'視爲輸出的文字字符串,而不是用於處理轉義字符的選項。)使用'printf'\ n \ b''代替便攜式行爲。 – chepner

回答

0
#!/bin/bash 

DEST_PATH=/Volumes/PrivateMain/Media 
mkdir -p $DEST_PATH 
SAVEIFS=$IFS 

IFS=$(printf "\n\b") 

for i in $(find "/Users" -iname "*.jpg") 
do 
FILENAME="$(basename $i)" 
MD5="$(md5 -q $i)" 

cp "$i" "$DEST_PATH/$MD5-$FILENAME" 

done 

IFS=$SAVEIFS 

感謝所有誰幫助了!但是,由於可能會覆蓋2個相同的命名文件,因此我已經將腳本編輯爲如下所示。

SAVEIFS=$IFS 
IFS=$(printf "\n\b") 
COUNTER=0; 
for i in $(find "/Users" -iname "*.jpg"); 
do 

BASE=`expr "$i" : '.*/\(.*\)\..*'`; 
EXT=`expr "$i" : '.*/.*\.\(.*\)'`; 
COUNTER=`expr $COUNTER + 1` ; 
cp "$i" ""${tardir}"/"$x"/JPG/"$BASE"_"$COUNTER"."$EXT"" 

done 
IFS=$SAVEIFS   
+0

我想你想'cp「$ i」「$ {tardir}/$ x/JPG/$ {BASE} _ $ COUNTER。$ EXT」'。 – chepner