将目录文件与映射文件进行比较,以便从同一目录

时间:2017-04-20 07:42:28

标签: shell

在一个目录中我的文件很少:

a.txt
b.txt
c.txt
z.txt

在不同的目录中我有一个名为map_file的文件名,其数据如下:

a.txt
b.txt
c.txt
d.txt
e.txt
f.txt

我想在目录中与map_file中的文件名进行比较(仅文件名不是文件名的内容)文件。

  1. 如果在目录中找到新文件(不在map_file中退出),则将文件复制并重命名为其他目录。
  2. 如果目录中没有文件(按照map_file),则还要复制并重命名为某个目录。
  3. 以下示例代码我只获得第一个条件,而不是两个。

    我正在使用的示例代码是

    for file in *.txt
    do
    if [[ ! $(grep "$file" /path/to/map_file) ]]; then
       echo "$file is not in map_file -- copy/rename somewhere else."
       cp ${file} ../Add-${file}
    fi
    done
    

    所以最终输出应该如下:

    Add-z.txt                   Del-d.txt
                                Del-e.txt
                                Del-f.txt
    

1 个答案:

答案 0 :(得分:0)

cd path/to/directory
map_file=path/to/map.txt
for file in `ls -lrt *.txt | awk '{print $9}'`
do
if [[ ! $(grep "$file" $map_file) ]];
then
   echo "$file is not present in map_file"
   #cp ${file} ../Add-${file}
else
    while IFS= read line
    do
        if [ ! -f "$line" ];
        then
            #touch ../Del-${line}
        fi
    done <"$map_file"
fi
done

如果可以进一步优化,请查看我的回答并回复。