2个目录中的公共文件

时间:2015-03-02 05:41:58

标签: bash perl shell unix

我有两个目录dir1和dir2,每个目录包含8000多个文件。我想将dir 1中具有相同名称的dir1中的文件解压缩到一个目录,并将dir2中dir1中具有相同名称的文件解压缩到另一个目录中。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你正在寻找类似的东西

#!/bin/bash

dir1list=(/path/to/dir1/*)
dir2list=(/path/to/dir2/*)

mkdir /tmp/dirlist

for(( n=0; n<${#dir1list}; n++)); do
   echo "${dir1list[n]##/*/}" >> /tmp/dirlist/dir1.list
done

for(( n=0; n<${#dir2list}; n++)); do
   echo "${dir2list[n]##/*/}" >> /tmp/dirlist/dir2.list
done

grep -Fx -f /tmp/dirlist/dir2.list /tmp/dirlist/dir1.list > /tmp/dirlist/difflist1.txt

grep -Fx -f /tmp/dirlist/dir1.list /tmp/dirlist/dir2.list > /tmp/dirlist/difflist2.txt

XIFS=$IFS
IFS=$'\n'
Difflist1=($(</tmp/dirlist/difflist1.txt))
Difflist2=($(</tmp/dirlist/difflist2.txt))
IFS=$XIFS

for(( n=0; n<${#Difflist1}; n++)); do
   mv "/path/to/dir1/${Difflist1[n]}" /path/to/dir3
done

for(( n=0; n<${#Difflist2}; n++)); do
   mv "/path/to/dir2/${Difflist2[n]}" /path/to/dir4
done

可能有一种更优雅的方式来做到这一点。我的基础是几个月前我必须写的一个更复杂的脚本,所以它可能不适合你的特定工作。