2014-11-06 75 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