Bash

如何移動命令輸出的所有文件?

  • March 4, 2014

我有這個 grep 命令來查找其中沒有“附件”一詞的文件。

grep -L -- Attachments *

我想移動從該命令輸出的所有文件。我如何在 bash 中做到這一點?我用管子嗎?我是否在完整的腳本中使用了更冗長的 if/then 語句?

如果文件名包含可能產生匹配的新行、製表符、空格或 glob 組合,如果您知道沒有,這對於一次性情況可能更容易:

mv $(grep -L Attachments *) dest_dir

您想要做的是使用 pipe 和 greps-Z選項:

使用 GNU grep 和 mv

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

-Z結合xargs -0處理任何帶有特殊字元的文件名。

使用 BSD grep 和 mv(就像在 MacOS X 上一樣)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
   mv "./$file" target_directory
done

在 BSD 上,grep -Z表示decompressgrep --null適用於 BSD 和 GNU。BSDmv缺少選項-t

引用自:https://unix.stackexchange.com/questions/117951