我正在迁移到 Linux,并且需要转换以下 Windowscmd
命令:
fc file1.txt file2.txt | find /i "no se han encontrado diferencias" > nul && set equal=yes
我认为fc
可以用diff
or代替comm
,但我不知道如何做这部分,也许是一个声明......find
grep
&&
if
答案1
猜测一下这些 Windows 命令的作用,我想说 POSIXsh
脚本中的等效命令是:
equal=no
cmp -s file1 file2 && equal=yes
如果两个文件可以读取并且具有相同的内容(字节到字节),则将equal
变量设置为。yes
作为 的替代方案cmp -s
,在某些系统(包括基于 Linux 的系统)上,您可以使用diff -q
. diff -q
(q
为了安静的),与大多数cmp -s
(s
对于沉默的)如果无法读取任何文件,将报告错误消息。虽然diff
和的 GNU 实现cmp
都首先检查这两个文件是否是同一文件的路径(包括另一个文件的硬链接或符号链接)或者大小不同,以节省读取它们的麻烦,但busybox
的实现cmp
并不而busybox
diff
确实如此。因此,在那些使用 的系统上,出于性能原因,busybox
您可能更喜欢。diff -q
答案2
您的 Windows 命令似乎会使用该命令比较两个文件fc
,并在输出中搜索“无差异”消息;如果我们看到该消息,则将变量设置equal
为yes
。
unix命令cmp
可以用来比较文件,如果匹配则返回零输出,我们可以直接测试这一点,因此不需要“搜索输出”功能。
[[ -z "$(cmp file1 file2 2>&1)" ]] && equal=yes
答案3
在bash
shell 中,&&
运算符是用于进程控制的逻辑与,如果第一个进程未因错误退出,则允许运行第二个进程。双管道 ( ||
) 的作用类似,但它是一个 OR 语句,并且如果先前的命令不成功,则会运行。
sample_file
因此,给出一个名为以下内容的文件:
aaa
bbb
123
ccc
ddd
命令
grep ccc sample_file >/dev/null && echo found || echo not found
将回显“找到”和这个 -
grep cow sample_file >/dev/null && echo found || echo not found
会回显“未找到”
只需将 echo 语句替换为您的变量赋值即可。