2017-04-20 159 views
0

新增和删除的文件映射文件的目录中,我有几个文件为:比较目录中的文件与从相同的目录

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),则还复制和重命名一些目录。

下面的示例代码,我只获得了第一个条件不能同时使用。我使用的

示例代码

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 

回答

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 

请看看我的答案和回应,如果能进一步优化。

相关问题