【问题标题】:Given the file name, how to get it from a directory in shell给定文件名,如何从shell中的目录中获取它
【发布时间】:2012-04-19 03:39:50
【问题描述】:

我想比较不同目录中同名的 2 个文件。 $1 和 $2 是 2 个目录。我可以检查是否有同名文件,但是我不知道如何获取第二个文件..

cd $1
    for i in `ls`
do
if [ -f $2/$i ]
then
    echo "find it in another directory"

    GET THE OTHER FILE IN $2, THEN COMPARE THEM

    cmp -s $i THE OTHER FILE
    if [ $? = 0 ]
        echo "they are same"
    else
        echo "they are different"
    fi
fi
done

【问题讨论】:

  • 您可以使用comm -12 <(ls "$1") <(ls "$2") 获取通讯名称

标签: linux file shell find


【解决方案1】:

最简单的问题是 args 中的空格 - 很容易修复,只需引用 $1 和 $2

if [ -f "$2/$i" ]

但我怀疑问题是您正在 CD 到 $1,这意味着 $2 无效(如果它是相对路径)

Solution1) 使用绝对路径(例如 /staff/bathpp/stuff/dir2)

解决方案2)如果您期望相对路径,则在跳转之前获取当前目录。

origDir=`pwd`
...
path2="$origDir/$path2"

我个人会进行一些检查,所以它对两者都有效。

【讨论】:

  • 好的,谢谢。另一件事是我仍然不知道如何获取第二个文件,我是 shell 新手,我尝试了 find、grep,都不起作用。不知道如何获取该文件以便我进行比较。
  • 不确定“get”是什么意思——如果 $2 是绝对路径,“$2/$i”会“get”它。如果 $2 是相对路径,则 "$origDir/$2/$i"
【解决方案2】:
for FIRST in $1/*
do
    SECOND=$2/$(basename "$FIRST")
    if [ -f "$SECOND" ]; then
        diff --brief "$FIRST" "$SECOND"
    fi
done

注意diff --brief 仅在它们不同时输出。如果您想查看实际差异,请删除--brief

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2011-03-05
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多