比较目录和映射文件之间的文件名

时间:2017-04-19 13:20:02

标签: shell

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

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

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

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

我想比较(只有文件名不是文件名的内容)文件在目录中与map_file中的文件名进行比较。如果在目录中找到新文件(不在map_file中退出)则将文件复制并重命名为其他文件目录。

2 个答案:

答案 0 :(得分:0)

如果约束到shell,您可以grep查看映射文件中的每个第一个列表文件名,并使用该结果来确定是否复制/重命名。像这样:

cd dir_a
for f in *; do
    if ! grep -qE '^'"$f"'$' /path/map_file; then
         cp "$f" /dir_b/new_name
    fi
done

答案 1 :(得分:0)

看看我对this question that is very similar的回答。

简而言之,您可以循环访问文件并在文件中找到它们:

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

那应该为你做。

如果您有任何问题,请与我们联系。