gpt4 book ai didi

linux - 列出目录 1 中但不在目录 2 中的文件,反之亦然?

转载 作者:IT王子 更新时间:2023-10-29 00:02:15 24 4
gpt4 key购买 nike

嘿,我开始编写 bash shell 脚本,我正在尝试为一个任务编写一个脚本,当您输入两个目录时,它将检查它们是否存在并根据错误消息显示,如果两个目录都存在,它将列出当前目录之间的差异。

$ cd dir-1
$ myshellscript . dir-2 (comparing . aka dir-1 against dir-2)

输出:

Files that are in . but not in dir-2
-rw------- 1 ddddd users 1 2011-03-1 01:26 123123123

Files that are in dir-2 but not in .
-rw------- 1 ddddd users 1 2011-03-1 01:26 zzzzzzzzzzzz

到目前为止,我似乎没有检测到目录是否存在,也没有列出差异:

dir-1=$1
dir-2=$2

if [ $# > 2 ]
then
echo "Usage: compdir dir-name1 dir-name 2"
exit 1
elif [ $# < 2 ]
then
echo "Usage: comdir dir-name1 dir-name 2"
elif [ ! -d "$@" ]
then
echo "/$@ is not a valid existing directory"
else
exit 0
fi

echo $dir-1
echo $dir-2

我必须使用的命令列表,否则我会使用 comm -32 <(ls -la dir-1) <(ls -la dir-2)

http://dl.dropbox.com/u/20930447/index.html

最佳答案

有点粗糙 - 但我一直使用的最简单的方法是(可以使用 diff 参数,我通常使用不同的 grep

diff -rcw DIR1 DIR2| grep ^Only

然后你可以随意排序和格式化

修改为格式(效率较低,因为我们在这里运行 diff 两次......很容易解决)

echo files only in $dir1
LST=$(diff ${dir1} ${dir2}| grep "^Only in ${dir1}"| sed 's@^.*: @@')
(cd ${dir1}; ls -l ${LST})

echo files only in $dir2
LST=$(diff ${dir1} ${dir2}| grep "^Only in ${dir2}"| sed 's@^.*: @@')
(cd ${dir2}; ls -l ${LST})

扩展上面的 sed 表达式:
s=搜索和替换
三个 '@' 分隔表达式(这是传统上用 '/' 完成的)
^ 匹配一行的开头(强制其余部分不匹配其他地方) .表示任何字符
* 表示前面的表达式 (.==match any char) 0-N 次 “:”是我从差异输出“Only in X:”中匹配的内容

妈妈,看,没有手 - 现在没有“sed”,它开始变得越来越不粗糙了

XIFS="${IFS}"
IFS=$'\n\r'
for DIFFLINE in $(diff ${dir1} ${dir2}|grep ^Only); do
case "${DIFFLINE}" in
"Only in ${dir1}"*)
LST1="${LST1} ${DIFFLINE#*:}"
;;
"Only in ${dir2}"*)
LST2+="${DIFFLINE#*:}"
;;
esac
done
IFS="${XIFS}"

echo files only in $dir1
(cd ${dir1}; ls -l ${LST1})

echo files only in $dir2
(cd ${dir2}; ls -l ${LST2})

您可能想了解 IFS ...它需要阅读 bash 手册,但它基本上是字段分隔符 ...默认情况下它们包含空格,我不希望循环被输入几行,只是完整的行 - 因此在循环期间,我将默认 IFS 覆盖为仅换行和回车。

顺便说一句,也许你的教授正在阅读 stackoverflow,也许接下来你将不会被允许使用分号 ;-) ...(回到“man bash”......顺便说一句,如果你在 emacs 中执行“man bash”,使更容易阅读海事组织)

关于linux - 列出目录 1 中但不在目录 2 中的文件,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com