目录下有所有文件和符号链接:
./02.tdf/IP_B186.tdf
./02.tdf/In_B186.tdf
./03.bed/IP_B186_vs_In_B186_peaks.xls.promoter_peak.bed
./03.bed/IP_B186_vs_In_B186_peaks.xls.bed
./01.genome/Harukei3_v1.41.fa
./01.genome/Harukei3_v1.41.gene.bed
./md5.txt
当我跑步时
find . -type f -o -type l -exec md5sum {} + | sort > md5.txt
我会得到:
cat md5.txt
331a1bebdaf8b09fbdb6468b9c53bac3 ./01.genome/Harukei3_v1.41.fa
6354c1dfb5b0aff9620712ec17c271e3 ./01.genome/Harukei3_v1.41.gene.bed
当我跑步时
find . -type f -o -type l | while read i; do md5sum $i >> md5.txt; done
我会得到:
cat md5.txt
d9eb8d2ad4f0c03ca1dc9628e3562f01 ./02.tdf/IP_B186.tdf
c72eda337f2d75301baf125d6d64a5bc ./02.tdf/In_B186.tdf
3ea65045235ed51efcc88af49d126a60 ./03.bed/IP_B186_vs_In_B186_peaks.xls.promoter_peak.bed
954484488dce3f5f18b7c06f6693f223 ./03.bed/IP_B186_vs_In_B186_peaks.xls.bed
331a1bebdaf8b09fbdb6468b9c53bac3 ./01.genome/Harukei3_v1.41.fa
6354c1dfb5b0aff9620712ec17c271e3 ./01.genome/Harukei3_v1.41.gene.bed
第二个结果就是我想要的,我想知道为什么第一个脚本给出如此奇怪的输出。 有人可以帮助我吗?非常感谢。
我也尝试了
find . -type f -o -type l -exec md5sum {} \; | sort > md5.txt
,但它给出了我不想要的相同输出。
find
的标准(格式化我的):
可以使用以下运算符组合原色(按优先级递减的顺序):
表情(
)
- 如果表达式为真,则为真。
表情!
- 否定原初;一元 NOT 运算符。
- 表达式 [
] 表达式-a
- 初选的结合; AND 运算符由两个原色并置隐含,或由可选的
运算符明确表示。如果第一个表达式为 false,则不应计算第二个表达式。-a
- 表情
表情-o
- 初选交替;或运算符。如果第一个表达式为 true,则不应计算第二个表达式。
如果没有表达式,则应使用
作为表达式。否则,如果给定表达式不包含任何原色、-exec
或-ok
,则给定表达式应有效替换为:给定_表达式(
)
find . -type f -o -type l -exec md5sum {} +
其形式为 表达式
-o
表达式,其中表达式:
-type f
-type l -exec md5sum {} +
只有第二个产生输出。
find . -type f -o -type l
这也有形式 表达式
-o
*表达式,带有表达式:
-type f
-type l
都没有明确地产生输出。然而,上面的最终规则适用,并且隐含的命令是:
find \( -type f -o -type l \) -print
正如 @jqurious 在评论中指出的那样,对于第一个命令,您可能应该使用括号:
find \( -type f -o -type l \) -exec md5sum {} +