2011-10-15 41 views
0

嗨,我有两个目录a1dir1和a1dir2。我想查找每个目录唯一的文件。这是双方UNIX-使用'查找'来查找文件的副本

$ ls -al ~david/a1dir1 --time-style=long-iso 
total 56 
drwxr-xr-x 4 david users 4096 2011-10-11 21:20 . 
drwx--x--x 12 david users 4096 2011-10-03 16:42 .. 
-rw------- 1 david users 60 2011-09-20 17:43 F3.DAT 
-rw------- 1 david users 40 2011-09-20 17:43 f1 
-rw------- 1 david users 270 2011-09-20 17:43 f2.c 
-rwx------ 1 david users 7539 2011-09-20 17:43 make.socket 
-rw------- 1 david users 418 2011-09-20 17:43 make.socket.c 
-rw------- 1 david users 11843 2011-09-20 17:43 prog1 
-rw------- 1 david users 138 2011-09-20 17:43 prog1.c 
lrwxrwxrwx 1 david users  4 2011-10-11 21:17 s.link -> f2.c 
drwx------ 2 david users 4096 2011-09-20 17:43 test1.dir 
drwx------ 2 david users 4096 2011-09-20 17:43 test3.dir 
srwx------ 1 david users  0 2011-10-11 21:18 unix.socket 

$ ls -al ~david/a1dir2 --time-style=long-iso 
total 192 
drwxr-xr-x 5 david users 4096 2011-10-11 21:23 . 
drwx--x--x 12 david users 4096 2011-10-03 16:42 .. 
-rw------- 1 david users  39 2011-09-20 17:43 .hidden.file 
-rw------- 1 david users  60 2011-09-20 17:43 F3.DAT 
-rw------- 1 david users  40 2011-09-20 17:43 f1 
-rw------- 1 david users  88 2011-09-20 17:43 file2 
-rwx------ 1 david users 7539 2011-09-20 17:43 make.socket 
-r-------- 1 david users 135838 2011-09-20 17:43 phones 
-rw------- 1 david users 138 2011-09-20 17:43 prog1.c 
-rw------- 1 david users 120 2011-09-20 17:43 prog2.c 
lrwxrwxrwx 1 david users  4 2011-10-11 21:23 s.link -> f2.c 
drwx------ 2 david users 4096 2011-09-20 17:43 test1.dir 
drwx------ 2 david users 4096 2011-09-20 17:43 test2.dir 
drwx------ 2 david users 4096 2011-09-20 17:43 test3.dir 

(我通过a1dir1和a1dir2为arguements)我试过的列表:

for file in $(ls -al $1) 
do 
    find $2 -name "$file" 2> myerrors 
done 

虽然这个代码只是输出在a1dir1每一个文件? 任何帮助,将不胜感激:)

回答

0

没有找到一个例子可以是:

diff -q trunk tmp/trunk | grep -v Common | grep -v differ 
+0

好事情是,th是因为我的教授还没有教过普通和不同的选择,因此我不能使用它们。我必须完全按照他的演示格式化输出。我已经尝试了大约三天,但很难做到这么简单,因为他没有教过很多东西。 – user614573

+0

对不起,我没有意识到这些只是参数,我曾经看到引用 – user614573

0

你可以尝试使用diffdircmp取决于你的OS /可用的软件。下面是与GNU DIFF一个例子:

diff --brief dir1 dir2 

编辑

从您的评论,试试这个:

diff --brief dir1 dir2 | \ 
cut -c 9- | \ 
awk -F': ' '{print $1"/"$2}' | \ 
while read filename 
do 
    ls -ld $filename 
done 
+0

中的参数我必须能够正如我的教授想要的格式。我已经尝试列出两个目录并将它们管道化为文件并使用diff,但是我必须显示关于每个文件 – user614573

+0

@ user614573的所有信息,请参阅我在“编辑”中提出的建议。 – imm

+0

好吧,谢谢你,更好的工作,但事情是我不能使用“awk”,我为什么它很难,因为我不能只比较文件名与这个或“sed”就像我试过 – user614573

0

这不带空格也不过程子目录处理的文件名,但无论如何应比你的代码跑得更好:

for file in $(ls -A $1) 
do 
    ls -l $2/$file 2>/dev/null 
done 
+0

那么这仍然没有输出正确的文件,它生成F3.DAT,f1,make.socket,prog1.c和s.link - > f2.c 这就是我的问题贯穿每一次修改我要么得到太多的文件,要么显示不够。例如,F3.DAT文件我永远无法得到正确的结果 – user614573

+0

即使我将一个目录的内容列出到一个文件中,我也会遍历第二个目录中的每个文件并将其名称与文本文件进行比较,它会指出那些里面没有找到 – user614573

+0

对不起,我忽略了你的要求,只是试图修复你的脚本。 – jlliagre