如何使xargs对给定的每一行输入执行一次命令?
它的默认行为是将行分块并执行一次命令,将多行传递给每个实例。
从http://en.wikipedia.org/wiki/Xargs:
查找/path -type f -print0 | xargs -0 rm
在本例中,find为xargs的输入提供一长串文件名。然后Xargs将这个列表拆分为子列表,并对每个子列表调用rm一次。这比功能等效的版本更有效:
查找/path -type f -exec rm '{}' \;
我知道那个发现有"执行"的标志。我只是从另一种资源中引用了一个说明性的例子。
@Draemon的答案似乎是正确的“-0”,即使在文件中有空格。
我正在尝试xargs命令,我发现“-0”与“-L”完美地工作。即使空格也会被处理(如果输入以空结尾)。举例如下:
#touch "file with space"
#touch "file1"
#touch "file2"
下面的代码将拆分null值,并对列表中的每个参数执行命令:
#find . -name 'file*' -print0 | xargs -0 -L1
./file with space
./file1
./file2
因此-L1将对每个以null结尾的字符执行参数,如果使用"-0"。要看区别,试试:
#find . -name 'file*' -print0 | xargs -0 | xargs -L1
./file with space ./file1 ./file2
即使这样也会执行一次:
#find . -name 'file*' -print0 | xargs -0 | xargs -0 -L1
./file with space ./file1 ./file2
该命令将执行一次,因为“-L”现在不会在空字节上分裂。你需要同时提供“-0”和“-L”才能工作。
@Draemon的答案似乎是正确的“-0”,即使在文件中有空格。
我正在尝试xargs命令,我发现“-0”与“-L”完美地工作。即使空格也会被处理(如果输入以空结尾)。举例如下:
#touch "file with space"
#touch "file1"
#touch "file2"
下面的代码将拆分null值,并对列表中的每个参数执行命令:
#find . -name 'file*' -print0 | xargs -0 -L1
./file with space
./file1
./file2
因此-L1将对每个以null结尾的字符执行参数,如果使用"-0"。要看区别,试试:
#find . -name 'file*' -print0 | xargs -0 | xargs -L1
./file with space ./file1 ./file2
即使这样也会执行一次:
#find . -name 'file*' -print0 | xargs -0 | xargs -0 -L1
./file with space ./file1 ./file2
该命令将执行一次,因为“-L”现在不会在空字节上分裂。你需要同时提供“-0”和“-L”才能工作。