linux - 显示两个目录之间的变化

标签 linux bash shell unix

好的,这是我关于该主题的第五个线程,因为我在这个可怕的任务的各个方面都迷失了方向。我使用过其他解决方案,它们运行良好但无法使用,例如使用 awk 命令、sedcomm。相反,必须以艰难的方式做到这一点。

我很迷茫,在这一点上我什至没有交上去,因为它已经过了截止日期,所以它是零,过去 18 小时我一直在努力争取这个只是为了完成它而完成。如果您能救我一枪,我将不胜感激。

作业要点:您要编写一个 Bash shell 脚本,这将有助于比较两个目录的内容。编写满足以下要求的实用程序:

  1. 您的脚本将比较文件名 在两个目录中,并列出 有关文件名的信息 在一个目录中,但不在另一个目录中。 列出的信息将是 每个文件的长列表,类似 到“ls -l”命令。这 必须指定目录名称, 包括任何必需的绝对或 相对路径。
  2. 您的脚本适用于所有类型 文件,包括目录 包含在指定的 目录。该脚本将打印 一个适当的错误消息,如果 传递给它的参数数量是 2 以外的其他值,或者如果 指定的目录名称不是 有效的现有目录的名称。 如果发出错误消息,则 脚本应该以退出结束 状态为 1(一)。否则,它 应该以 0 的退出状态结束 (零)。

规范:

  1. 目录中的文件 脚本应该在不工作 有执行权限,只读 如果我没记错的话只能 显示文件名,所以我们看不到 文件内容。我试过了,我明白了 权限被拒绝。
  2. 关于此的所有信息 作业可以在这里找到: https://cs.senecac.on.ca/~lczegel/BTO120/assign1/assign1.html

我做了什么:

#!/bin/bash

if [ ! -d $1 ]
   then
      echo $1 is not a valid existing directory >&2
      exit 1
   elif [ ! -d $2 ]
      then
      echo $2 is not a valid existing directory >&2
         exit 1
   elif [ $# = 0 ]
      then
         echo Usage: compdir dir-name1 dir-name2 >&2
         exit 1
   elif [ $# = 1 ]
      then
         echo Usage: compdir dir-name1 dir-name2 >&2
         exit 1
   elif [ $# = 2 ]
      then

         ls -a $1 > temp1
         ls -a $2 > temp2

         cat temp1 |
         while read input
         do
            grep -Fvf temp1 temp2 > temp1_diff
         done

         cat ~temp2 |
         while read input
         do
            grep -Fvf temp2 temp1 > temp2_diff
         done

         #Files that are in $1 but not in $2
         cat temp1_diff |
         while read input
         do
            Files that are in $1 but not in $2
            cd $2
            ls -la `cat ../temp1_diff`
         done

         cd ..
         echo -e

         #Files that are in $2 but not in $1
         cat temp2_diff |
         while read input
         do
            Files that are in $2 but not in $1
            cd $1
            ls -la `cat ../temp2_diff`
         done

   elif [ $# = 3 ]
      then
         echo Usage: compdir dir-name1 dir-name2 >&2
         exit 1
   else
         echo Usage: compdir dir-name1 dir-name2 >&2
         exit 1
fi

我遇到的问题:

  1. 它不会写入任何文件 有任何字符,如点或 空格或其中的任何内容 temp1_diff 和 temp2_diff。
  2. 我无法让 echo 回显一次 即使它在循环之前或循环中。
  3. 我经常收到它无法解决的错误 导航到 $1 或 $2 等。

最佳答案

这样处理怎么样:

for f in `ls -a $1`
do
    if [ -r $1/$f ] && [ ! -x $1/$f ] && [ ! -r $2/$f ]
        then 
            echo "$f Not in other dir"

现在您知道该文件在您的第一个目录中,但不在第二个目录中。

编辑:更改为检查第一个目录中的文件是否可读 + 根据相关规范不可执行 - 这将告诉您它是否不在具有读取权限的另一个目录中

关于linux - 显示两个目录之间的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5285882/

相关文章:

linux - 启动 Konsole 窗口后运行什么语言,它能做什么?

linux - 如何从包含日期的多个文件中提取日期?

Java 执行文件错误

c++ - 无法在运行时找到共享对象。 KRPC

linux - 即使编译后也无法运行scala程序

linux - 通过ssh连接到另一台服务器后如何在shell脚本中下载文件?

php - bash php 沉默段错误

匹配文件名的正则表达式

php - 调用某些运行 bash 脚本的 php 脚本函数

linux - 复制除一个目录外的所有目录