2010-07-15 66 views
3

我以爲我找到了我的解決方案,因爲該命令在我的測試目錄中工作。grep命令在testdir中工作,但不在「真實」目錄中

grep -H -e 'author="[^"].*' *.xml | cut -d: -f1 | xargs -I '{}' mv {} mydir/. 

但是在非測試豬病使用該命令的命令沒有工作: 這是錯誤消息:

 
grep: unknown option -- O 
Usage: grep [OPTION]... PATTERN [FILE]... 
Try `grep --help' for more information. 

不會連這個工作:

$ grep -H author *.xml 

或者這個:

$ grep -H 'author' *.xml 

(同樣的錯誤信息)

我懷疑它與文件名或文件數有一些關係。 我在非測試目錄中有近3000個文件,而在我的測試目錄中只有20個文件。 在這兩個目錄中幾乎所有文件名都包含空格和「 - 」。

一些更多的信息:

  • 我使用Cygwin。
  • 我不允許更改文件名

回答

1

試一下這個(更新):

grep -HlZ 'author="[^"].*' -- *.xml | xargs -0 -I {} mv -- {} mydir/ 

說明(更新)

  • 在你的 「真實」 的目錄,你有一個名稱以-O開頭的文件。 您的shell擴展文件列表*.xmlgrep將您的-起始文件名作爲選項(無效)。 mv發生同樣的事情。正如info coreutilsCommon options部分中所述,您可以使用--來分隔選項列表。 --後面的內容被認爲是操作數,而不是選項。

  • 使用-l(小寫L)選項,grep只輸出匹配的文件的文件名,所以你不需要使用cut

  • 要正確處理每個奇怪的文件名,您必須使用中的-Zxargs中的-0

  • 無需使用-e,因爲您的模式不以-開頭。

希望這會有所幫助!

+0

非常感謝您的好建議! 現在至少解決了部分問題。 上帝的消息:grep不會抱怨,它會發現一個文件(帶有這個可怕的名字): !!導入設備 - 待完成later.xml 壞消息:grep未列出包含搜索字符串的所有文件 - 例如以單短劃線,雙短劃線和三下劃線開頭的文件: -OFF.xml - 操作。 xml ___查看列表 - menu.xml 我應該對變量IFS做些什麼嗎? /T – Tony 2010-07-16 14:02:54

+0

@Tony:我認爲'grep'列出了這些文件,問題是'mv'。你也必須用'mv'來做' - '技巧。現在我將編輯答案來解決問題。如果有效,請接受我的回答! :) – 2010-07-16 19:34:43

+0

是的,它的工作!好!/ T – Tony 2010-07-22 07:06:41