【问题标题】:UNIX- Using to 'find' to find duplicates of filesUNIX-用于“查找”以查找文件的重复项
【发布时间】:2011-10-15 22:33:28
【问题描述】:

您好,我有两个目录 a1dir1 和 a1dir2。我想找到每个目录唯一的文件。这是两者的列表

$ 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 作为参数)我试过了:

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

虽然这段代码只输出 a1dir1 中的每个文件? 任何帮助将不胜感激:)

【问题讨论】:

    标签: file unix search find


    【解决方案1】:

    没有找到的例子可能是:

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

    【讨论】:

    • 好吧,这是一个作业,所以因为我的教授没有教过通用和不同的选项,所以我不能使用它们。而且我必须完全按照他的说明格式化输出。我尝试了大约三天,但由于他没有教过很多东西,所以很难做到这么简单。
    • 对不起,我没有意识到这些只是参数,我习惯于在引号中看到参数
    【解决方案2】:

    您可以尝试使用diff 或dircmp,具体取决于您的操作系统/可用软件。下面是一个 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
    

    【讨论】:

    • 我必须能够完全按照教授的要求进行格式化。我尝试列出两个目录并将它们通过管道传输到文件中并使用差异,但我必须显示有关每个文件的所有信息
    • @user614573,请参阅我在“编辑”中提出的建议。
    • 嗯,谢谢你,效果更好,但问题是我不能使用“awk”,我为什么这么难,因为我不能像我尝试过的那样将文件名与这个或“sed”进行比较
    【解决方案3】:

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

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

    【讨论】:

    • 好吧,这仍然没有输出正确的文件,它会产生 F3.DAT、f1、make.socket、prog1.c 和 s.link -> f2.c 这一直是我的每个问题修改我要么得到太多文件,要么显示不够。例如,我永远无法正确处理的 F3.DAT 文件
    • 即使我将一个目录的内容列出到一个文件中,我也会遍历第二个目录中的每个文件,并将其名称与文本文件进行 grep,它表示没有找到其中的内容跨度>
    • 抱歉,我忽略了您的要求,只是尝试修复您的脚本。
    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 2011-05-04
    • 2016-01-08
    • 1970-01-01
    • 2015-06-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多