2013-09-11 58 views
0

我是Unix新手,我正在學習在自動化文件複製等方面運行腳本的強大功能。我已經幫助創建了初始腳本(信用卡的信用卡到期日: https://apple.stackexchange.com/questions/101436/automate-duplicating-and-renaming-images/101437)但現在我想知道如何在複製文件時生成特定的目錄名稱。這裏是原始腳本:在創建文件時創建目錄

#!/bin/bash 
file=$1 
prefixes=$2 
filename=`basename "$file"` 
while read line 
do 
    cp $file "$line-$filename" 
done < $prefixes 

我基本上調用腳本,然後有一個文本文件,該文件在同一目錄的字符串追加到對作出新的文件的開頭的前綴。我想要做的也是創建一個具有原始文件名的目錄,這樣我就可以將所有重複項自動放置在新文件夾中。我曾嘗試這樣的事情:

#!/bin/bash 
file=$1 
prefixes=$2 
filename=`basename "$file"` 
while read line 
do 
    mkdir $filename 
    cp $file "$filename/$line-$filename" 
done < $prefixes 

但這似乎並不奏效。不過你會看到我的意圖。我想要一個與原始文件同名的目錄,然後將所有新圖像複製到該目錄中。我在Mac OSX的終端中使用的命令是​​。

我已經得到了腳本來創建一個目錄,如果我只是使用類似mkdir test的東西,但這樣做不會有任何好處,因爲每次運行腳本時都必須進入並更改目錄名稱。

讓我知道如果您有任何問題。如果我犯了一些重大錯誤,我很抱歉,我只是無法找到解決方案。謝謝你的幫助!

回答

1

如果$filename位於同一目錄中,您將無法創建目錄,因爲文件已存在。您可以考慮使用不帶擴展名的文件名等不同的名稱。

#!/bin/bash 

file=$1 
prefixes=$2 
filename=${file##*/} ## Better than using an external binary like basename. 
dir=${filename%%.*} ## Remove extension. 

mkdir -p "$dir" || exit 1 ## Only need to create it once so place it outside the loop. And `$dir` might already have been made so use `-p`. This would also make the code exit if `mkdir` fails. 

while read -r line ## Use -r to read lines in raw form 
do 
    cp "$file" "$dir/$line-$filename" 
done < "$prefixes" 

請考慮在""附近正確引用您的變量。