Xargs

Xargs -J 選項

  • June 7, 2020

該站點提供的xargs命令帶有一個-J選項,可以將標準輸入傳遞到命令參數的所需位置:

find . -name '*.ext' -print0 | xargs -J % -0 rsync -aP % user@host:dir/

但在GNU xargs 手冊頁中,此選項不存在。

對於接受此的命令,執行此操作的方法是什麼?

我不確定這是您所期望的,但是在 BSD 世界(例如 macOS)中-I-J它們將多個“行”傳遞給命令的方式不同。例子:

$ ls
file1 file2 file3

$ find . -type f -print0 | xargs -I % rm %
rm file1
rm file2
rm file3

$ find . -type f -print0 | xargs -J % rm %
rm file1 file2 file3

因此-I,xargs 將為單獨傳遞給它的每個元素執行命令。使用-J, xargs 將執行一次命令並連接所有元素並將它們作為參數一起傳遞。

某些命令,例如rmormkdir可以接受多個參數並以與傳遞單個參數並多次執行它們相同的方式對它們進行操作。但是某些應用程序可能會根據您向它們傳遞參數的方式而改變。例如tar. 您可以創建一個 tar 文件,然後向其中添加文件,或者您可以通過一次性將所有文件添加到其中來創建一個 tar 文件。

$ find . -iname "*.txt" -or -iname "*.pdf" -print0 | xargs -0 -J % tar cjvf documents.tar.bz2 %

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