网站搜索

适合初学者的 Linux Xargs 命令的 12 个实用示例


Xargs 是一个很棒的命令,它从标准输入读取数据流,然后生成并执行命令行;这意味着它可以获取命令的输出并将其作为另一个命令的参数传递。如果没有指定命令,xargs默认执行echo。许多人还指示它从文件而不是标准输入中读取数据。

xargs 在命令行的日常使用中有多种用途。在本文中,我们将为初学者讲解 12 个实用的 Linux xargs 命令示例。

1. 第一个示例展示了如何查找所有 .png 图像并使用 tar 实用程序将它们存档,如下所示。

此处,操作命令 -print0 允许在标准输出上打印完整文件路径,后跟空字符和 -0 xargs 标志有效地处理文件名中的空格。

find Pictures/tecmint/ -name "*.png" -type f -print0 | xargs -0 tar -cvzf images.tar.gz

2. 您还可以使用 xargs 将 ls 命令的多行输出转换为单行,如下所示。

ls -1 Pictures/tecmint/
ls -1 Pictures/tecmint/ | xargs

3. 要生成系统上所有 Linux 用户帐户的紧凑列表,请使用以下命令。

cut -d: -f1 < /etc/passwd | sort | xargs

4.假设你有一个文件列表,并且你想知道列表中每个文件的行数/单词数/字符数,你可以使用 ls 命令xargs 为此目的如下。

ls *upload* | xargs wc

5. Xarags还允许您查找并递归删除目录,例如以下命令将递归删除目录Downloads中的DomTerm

find Downloads -name "DomTerm" -type d -print0 | xargs -0 /bin/rm -v -rf "{}"

6.与上一个命令类似,您也可以找到当前目录下所有名为net_stats的文件并将其删除。

find . -name "net_stats" -type f -print0 | xargs -0 /bin/rm -v -rf "{}"

7.接下来,使用xargs将一个文件一次性复制到多个目录;在此示例中,我们尝试复制该文件。

echo ./Templates/ ./Documents/ | xargs -n 1 cp -v ./Downloads/SIC_Template.xlsx 

8. 您还可以使用 find 命令、xargs 和 rename 命令一起将特定目录中的所有文件或子目录重命名为小写,如下所示。

find Documnets -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;

9. 这是xargs的另一个有用的使用示例,它展示了如何删除目录中的所有文件,除了一个或几个具有给定扩展名的文件。

find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}

10. 如前所述,您可以使用 -a 标志指示 xargs 从文件而不是标准输入中读取项目,如下所示。

xargs -a rss_links.txt

11. 您可以使用 -t 标志启用详细程度,该标志告诉 xargs 在执行之前在标准错误输出上打印命令行。

find Downloads -name "DomTerm" -type d -print0 | xargs -0 -t /bin/rm -rf "{}"

12. 默认情况下,xargs 使用空格终止/分隔项目,您可以使用 -d 标志来设置分隔符,该分隔符可以是单个字符、C 样式字符转义(例如 \n)或八进制或十六进制转义代码。

此外,您还可以提示用户是否运行每个命令行并从终端读取一行,使用 -p 标志,如图所示(只需键入 y 即可n表示)。

echo ./Templates/ ./Documents/ | xargs -p -n 1 cp -v ./Downloads/SIC_Template.xlsx 

有关更多信息,请阅读 xargs 手册页。

man xargs 

现在就是这样! Xargs 是一个用于构建命令行的强大实用程序;它可以帮助您将一个命令的输出作为另一个命令的参数进行处理。在本文中,我们为初学者解释了 12 个实用的 xargs 命令示例。通过下面的反馈表与我们分享您的想法或问题。