循环两个文件(重命名和移动)

时间:2015-01-23 12:55:03

标签: bash shell scripting

首先,这是代码;

#!/bin/bash

i=1;
while read line;
do
        cp "$i.eps" "$line.eps"
        while read line2;
        do
            mv "$line.eps" "$line2"
        sed -i '1d' cate.txt
        done < cate.txt
sed -i '1d' cate.txt
((i++))
done < Names.txt

cp "$i.eps" "$line.eps"

让我解释一下;我总共有2个文件。其中一个名为“Names.txt”,其中包含文件名。另一个文件是“cate.txt”,其中包含目录名称。我也有.eps文件的名字像; 1.eps,2.eps等...

所以,我想要做的是读取“Names.txt”中的第一行,然后用第一行更改第一个文件的名称,然后读取“cate.txt”中的第一行并移动第一行我在“cate.txt”

中读到的目录下的文件

PS 1:我在那里使用了sed命令因为我总是在“cate.txt”中读取第一行。所以,我想在读完第一行后,我可以将其删除,然后再次读取第一行。但是代码并没有成功。

PS 2:在这段代码中,我可以阅读“Names.txt”并重命名.eps文件。但是当我开始阅读“cate.txt”时,脚本无法正常工作。

谢谢!

2 个答案:

答案 0 :(得分:0)

假设names.txtcate.txt具有相同的行数,您可以将它们连接在一起并使用该输出:

#!/bin/bash

i=1
while read filename dirname; do
  mkdir -p $dirname
  cp $i.file $dirname/$filename
  ((i++))
done < <(paste names.txt cate.txt)

运行前的示例:

$ tree
.
|-- 1.file
|-- 2.file
|-- 3.file
|-- cate.txt
`-- dirs.txt

$ cat names.txt
first_file
second_file
third_file

$ cat cate.txt
first_dir
second_dir
third_dir

之后:

$ tree
.
|-- 1.file
|-- 2.file
|-- 3.file
|-- cate.txt
|-- dirs.txt
|-- first_dir
|   `-- first_file
|-- second_dir
|   `-- second_file
`-- third_dir
    `-- third_file

答案 1 :(得分:0)

我收到此错误

nameAndMove:第8行:意外令牌<' nameAndMove: line 8:附近的语法错误&lt; &lt;(paste iconNames.rtf iconCate.rtf)'

我用Google搜索,人们说我的终端不允许进程替换。我用mac终端。

谢谢