Bash
如何移動命令輸出的所有文件?
我有這個 grep 命令來查找其中沒有“附件”一詞的文件。
grep -L -- Attachments *
我想移動從該命令輸出的所有文件。我如何在 bash 中做到這一點?我用管子嗎?我是否在完整的腳本中使用了更冗長的 if/then 語句?
如果文件名包含可能產生匹配的新行、製表符、空格或 glob 組合,如果您知道沒有,這對於一次性情況可能更容易:
mv $(grep -L Attachments *) dest_dir
您想要做的是使用 pipe 和
grep
s-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
表示decompress,grep --null
適用於 BSD 和 GNU。BSDmv
缺少選項-t