2014-11-06 66 views
1

我正在嘗試使用SED創建一系列所有包含同名文件的目錄,但每個目錄中的每個文件都會有一行不同。SED目錄創建錯誤

for i in $(cat ~/SCRIPTS/AALIST.txt); do 

mkdir ~/jan10/25 

sed -e "s/HAT/${i}/" <~/SCRIPTS/HAT25.inp > ~/jan10/25/25$i/mat.inp 

AALIST.txt簡直是含有有效文件..

A 
B 
C 
D 
E 

而HAT25.inp有文本的多行,然後在第25行字「帽子」,這頂帽子應該用A,B,C等代替。在目錄25中,SED應該創建名爲25A,25B,25C等的目錄。這些目錄的內部應該是原始的HAT25.inp文件,用HAT替換爲字母父目錄。這意味着目錄25A應該包含HAT.inp,並將其重命名爲mat.inp,並在第25行包含A,而不是HAT。不幸的是,當我嘗試執行上面我的代碼,我得到的錯誤:

cannot create directory `/home/user/jan10/25': File exists 
./loop.sh: line 23: /home/user/jan10/25/25$i/mat.inp: No such file or directory 

有什麼我做錯了,我無法確定我做了什麼錯誤的任何見解。

編輯:

通過註釋掉MKDIR行,我現在收到以下錯誤。創建目錄「25」,但不創建目錄25A,25B等。收到的錯誤如下。

./loop.sh: line 23: /home/user/jan10/25/25A/mat.inp: No such file or directory 
+0

你意識到你的'mkdir'在你的循環中,並且在每個循環中執行因此,'不能創建目錄...'。 ?也許你真的想'mkdir〜/ jan10/25/$ i'? '25/25 $ i'的錯誤有點神祕。鑑於你的代碼,我不會期望這一點。是正在執行的真正的代碼?祝你好運。 – shellter 2014-11-06 16:01:32

+0

你是對的,mkdir絕對不應該在循環中,但即使這個問題被註釋掉,問題仍然存在。目錄25被創建,但是沒有一個子目錄(25A,25B等)被創建。我現在收到的錯誤已經在上面編輯了! – George 2014-11-06 16:08:32

+0

我真的認爲你問題的主要來源是你想'mkdir〜/ jan10/25/$ i',對吧?使用它可能會修復其他錯誤。 – shellter 2014-11-06 16:09:53

回答

1
for i in $(cat ~/SCRIPTS/AALIST.txt) 
do 

    NewFolder=~/jan10/25/25${i} 
    mkdir "${NewFolder}" 

    sed -e "s/HAT/${i}/" ~/SCRIPTS/HAT25.inp > "${NewFolder}/mat.inp" 

done 
  • 你的代碼是缺少一些信息(循環結束,文件夾名結束在創建和$()
  • 一些enhancemnet直接MAYB一些空間(SED不需要<並能以文件爲參數(避免使用子shell),使用周圍的{}作爲變量
+0

謝謝,我會試試這個! – George 2014-11-06 16:27:22

+0

@George:這更好,所以請接受它。祝你們好運。 – shellter 2014-11-06 16:42:38

+0

這很好,但在代碼之前我添加了一個簡單的命令來實際製作編號的目錄,沒有「mkdir〜/ jan10/25」,除非目錄已經存在,乾杯,這個代碼工作得很好! – George 2014-11-06 17:19:00