將搜尋內容移到不同的目錄

將搜尋內容移到不同的目錄

我使用的是 Oracle Solaris。

我在用:

grep "searchstring" filename.*

上面的命令返回我的搜尋結果。

現在我想將上面搜尋結果中的所有檔案(不是搜尋結果的所有檔案)移到特定目錄中../mydir/

如何在一個命令中完成此操作(搜尋和移動都應在一行命令中完成)。

答案1

ksh, bashor /usr/xpg4/bin/sh,假設檔名不包含換行符,您可以在(grep -l的輸出上使用 split+glob 運算符-l是匹配的文件)。

透過離開來呼叫該運算符命令替換(`...`$(...)) 不加引號。在這裡,我們使用特殊變數對其進行調整,$IFS以說明我們要分割哪個字元(此處為換行符),並透過停用該glob部分set -f

IFS='
'
set -f
mv $(set +f; grep -l searchstring filename*) ../mydir/

(我們恢復通配符裡面用於擴展filename*) 的命令替換(在子 shell 中運行)。

您可以將其簡化為:

mv $(grep -l searchstring filename*) ../mydir/

如果您知道檔案名稱不包含空格、製表符、換行符、*?字元[。上面的分割是在換行符、空格和製表符(這是 的預設值$IFS)上完成的,並且對分割結果的每個單字執行通配符(但如果沒有檔案名稱包含通配符,則這不是問題)。

如果您無法保證檔案名稱不包含換行符,您可以使用循環:

for f in filename*; do
  grep -q searchstring "$f" && mv "$f" ../mydir/
done

相關內容