作为大学课程的一部分,我试图在 500 个文件的列表中隐秘地搜索一个字符串,然后将找到的这些项目复制到一个新文件夹中。
我可以毫无问题地使用
grep -rnw '/home/steve/Desktop.CEDFOR.arnold-j/sent/' -e '[email protected]'
但是,当我尝试将结果传送到名为 Suspicious 的文件夹时,它会出错。
我正在使用的完整代码(基于几年前报告的类似问题)是
grep -rnw '/home/steve/Desktop.CEDFOR.arnold-j/sent/' -e '[email protected]' | xargs -0 cp -t /home/steve/Desktop/CEDFOR/arnold-j/Suspicious/
但是,错误表明不存在此类文件夹或文件。我可以确认文件夹 /home/steve/Desktop/CEDFOR/arnold-j/Suspicious/ 肯定存在。
澄清一下...我想将文件复制到“可疑”文件夹中,以便稍后查看。
我哪里出错了?
您
grep
应该有所不同,它需要:-l, --files-with-matches
, 只打印文件名,不匹配行-Z, --null
, 当您xargs
读取零分隔输出时-0
,这是一个好主意,您还需要在添加到命令时提供零分隔输出。-Z
grep
-F, --fixed-strings
,因为你有一个固定的字符串而不是一个模式,你应该使用-F
. 如果不是,您的“模式”也将匹配 egvladimirXgorny@enron+com
,这.
意味着正则表达式中的任何字符。也会-F
快很多!它不需要:
-n
打印匹配的行号,但应该xargs
如何处理呢?它应该改变:
虽然它有效,但您的命令应该更改为与概要的格式一致,因此您可以确定它也适用于不同版本的
grep
. (比较man grep
)。这意味着您的文件(或在您的情况下为路径)应该放在
-e ...
.因此,您的完整命令将显示为:
或者您可以省略
-e
以匹配第一个 SYNOPSIS 表格:您对我来说看起来不错,但是当找不到任何匹配的文件时
xargs
,您应该考虑添加-r, --no-run-if-empty
以避免错误。grep
并且对于您的命令,附加说明没有选项跟随是一个好
cp
习惯。否则,以开头的文件名可能会导致麻烦。--
cp
-
总共: