2014-09-10 66 views
0

我在shell文件中使用下面的命令,並在正則表達式匹配的目錄中正常工作。 問題是,它列出了所有文件,當沒有匹配的正則表達式。任何人都知道爲什麼它有這種行爲?
有沒有辦法避免它?當正則表達式不匹配目錄中的任何文件時,Shell會返回所有文件?

find . -type f -mtime +365 | egrep '.*xxx.yyy*.*'|grep -v "[^.]/" | xargs ls -lrt | tr -s " " | cut -d" " -f6-9 

感謝您的時間。 注:我在solaris 8上使用此腳本與splunk forwarder。

+1

整件事可以寫在'find'本身。你能用這個'find'命令來澄清你想要什麼嗎? – anubhava 2014-09-10 14:22:00

+0

我曾嘗試在find命令中使用all。由於某種原因,它不起作用。腳本是關於特定格式的文件老化 - 文件擴展 – akemko 2014-09-10 15:01:38

回答

2

如果xargs的輸入爲空,則它將在當前文件夾中執行ls -lrt

嘗試xargs -i "{}" ls -lrt "{}"。這迫使xargs將輸入參數放置到它執行的命令的某個位置。如果它沒有任何輸入,它不能也不會跳過運行命令。

如果您有GNU xargs,則可以使用開關--no-run-if-empty代替。

如果這不起作用,請嘗試將所有grep ing移動到find,以便您可以使用-ls來顯示文件列表。如果沒有文件匹配,這也將避免運行ls命令。

+2

+1此外,[不解析'ls'輸出](http://mywiki.wooledge.org/ParsingLs) – l0b0 2014-09-10 14:26:00

+0

我正在等待一個' - 'ls'的xml或'--csv'選項可以解決所有這些解析問題:-)如果你有GNU,你至少可以使用'ls --format =「...」'來控制輸出。 – 2014-09-10 14:28:16

+0

-i「{}」解決了我的問題。謝謝你的幫助。我在Ubuntu上2個月後完成了一個腳本。出於某種原因,可能SA在solaris服務器上禁用了一些命令,這是行不通的。再次感謝 – akemko 2014-09-10 15:24:17

相關問題