code review!
文章目录
-
- [1.Linux笔记之删除指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件](#1.Linux笔记之删除指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件)
- [2.将指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件移动到另一个目录](#2.将指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件移动到另一个目录)
- 3.xargs:用于从标准输入中读取数据,并将其作为参数传递给指定的命令
- 4.xargs和awk区别
1.Linux笔记之删除指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件
这段代码是使用C++语言编写的,它执行了一系列命令来删除指定目录下的旧文件。让我逐行解释代码的功能:
-
首先,声明并初始化了一个名为
cmd
的std::string
变量,用于存储要执行的命令。命令的内容是一个字符串,它由多个子命令以管道符(|
)连接而成。std::string cmd = "ls -t "+ pack_path + "/*.pack | tail -n +2 | xargs rm"; ``` - `ls -t`:这个子命令是用于列出指定目录下的文件和目录,并按照修改时间的倒序排列。 - `pack_path`:这是一个变量,用于指定目录的路径。它将被拼接到命令中的`/*.pack`之前,表示要列出以`.pack`为扩展名的文件。 - `/*.pack`:这个子命令是用于匹配指定目录下以`.pack`为扩展名的文件。 - `tail -n +2`:这个子命令是用于从输入中提取第2行及其之后的内容。在这里的作用是跳过第一行的文件(即最新修改的文件)。 - `xargs rm`:这个子命令是用于将前面的输出作为参数传递给`rm`命令,从而删除相应的文件。
-
接下来,使用
system
函数执行存储在cmd
变量中的命令。system(cmd.c_str()); ``` ``cmd.c_str()`将`cmd`变量转换为C风格的字符串,然后`system`函数将该字符串作为参数传递给操作系统来执行对应的命令。
综上所述,这段代码的作用是列出指定目录下以.pack
为扩展名的文件,根据修改时间的倒序排列,然后删除除最新修改的文件之外的所有文件。
2.将指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件移动到另一个目录
这段代码是使用C++语言编写的,它执行了一系列命令来移动指定目录下的旧文件到另一个目录。让我逐行解释代码的功能:
-
首先,声明并初始化了一个名为
cmd
的std::string
变量,用于存储要执行的命令。命令的内容是一个字符串,它由多个子命令以管道符(|
)连接而成。cppstd::string cmd = "ls -t "+ pack_path + "/*.pack | tail -n +2 | xargs -I{} mv {} " + new_pack_path; ``` - `ls -t`:这个子命令是用于列出指定目录下的文件和目录,并按照修改时间的倒序排列。 - `pack_path`:这是一个变量,用于指定目录的路径。它将被拼接到命令中的`/*.pack`之前,表示要列出以 `.pack` 为扩展名的文件。 - `/*.pack`:这个子命令是用于匹配指定目录下以 `.pack` 为扩展名的文件。 - `tail -n +2`:这个子命令是用于从输入中提取第2行及其之后的内容。在这里的作用是跳过第一行的文件(即最新修改的文件)。 - `xargs -I{}`:这个子命令是用于将前面的输出作为参数传递给`mv`命令,并使用`{}`作为占位符,将每个文件名依次替换到`{}`的位置。 - `mv {}`:这个子命令是用于移动文件,`{}`将被实际的文件名替换。 - `new_pack_path`:这是一个变量,用于指定目标目录的路径。它将被拼接到命令的末尾,表示要将文件移动到这个目录。
-
接下来,使用
system
函数执行存储在cmd
变量中的命令。cppsystem(cmd.c_str()); ``` ``cmd.c_str()`将`cmd`变量转换为C风格的字符串,然后`system`函数将该字符串作为参数传递给操作系统来执行对应的命令。
综上所述,这段代码的作用是列出指定目录下以.pack
为扩展名的文件,根据修改时间的倒序排列,然后将除最新修改的文件之外的所有文件移动到另一个目录。
3.xargs:用于从标准输入中读取数据,并将其作为参数传递给指定的命令
xargs
是一个命令行工具,用于从标准输入中读取数据,并将其作为参数传递给指定的命令。它可以将输入数据分割为单个参数,并将这些参数传递给命令进行处理。让我们详细解释xargs
的用法和功能。
基本语法:
xargs [选项] [命令]
常用选项:
-I{替换字符串}
:指定一个占位符,用于替换输入中的每个参数。通常使用{}
作为占位符,可以在命令中多次出现以表示不同的参数位置。-n 数字
:指定每次执行命令时传递的参数个数。默认情况下,xargs
将尽可能多地传递参数,但可以使用-n
选项限制每次传递的参数个数。-t
:显示要执行的命令,但不实际执行。-p
:在执行每个命令之前提示用户确认。
使用示例:
-
基本用法:将输入作为命令参数传递。
echo "file1 file2 file3" | xargs rm ``` 上述命令将字符串`file1 file2 file3`通过管道传递给`xargs`,然后`xargs`将其作为参数传递给`rm`命令,相当于执行了`rm file1 file2 file3`。
-
通过
-I
选项替换占位符:echo "file1 file2 file3" | xargs -I{} mv {} dest/ ``` 上述命令将字符串`file1 file2 file3`通过管道传递给`xargs`,然后`xargs`使用`-I{}`选项将每个参数替换为`{}`占位符,并将其作为参数传递给`mv`命令,相当于执行了`mv file1 dest/`、`mv file2 dest/`和`mv file3 dest/`。
-
限制每次传递的参数个数:
echo "file1 file2 file3 file4 file5" | xargs -n 2 rm ``` 上述命令将字符串`file1 file2 file3 file4 file5`通过管道传递给`xargs`,然后`xargs`使用`-n 2`选项,每次将两个参数传递给`rm`命令,相当于执行了`rm file1 file2`和`rm file3 file4`,最后一个参数`file5`单独执行了一次`rm`命令。
-
从文件中读取参数:
cat filelist.txt | xargs rm ``` 上述命令将文件`filelist.txt`的内容通过管道传递给`xargs`,然后`xargs`将每一行作为参数传递给`rm`命令,实现批量删除文件的功能。
这些只是xargs
命令的一些常见用法,它还有其他选项和功能可以根据需要进行调整和使用。请注意,当使用xargs
时,请确保输入的参数不包含特殊字符或空格,以避免意外行为。
4.xargs和awk区别
xargs
和awk
是两个不同的命令行工具,它们在处理输入数据和执行操作时有一些区别。
-
功能:
xargs
:主要用于从标准输入中读取数据,并将其作为参数传递给指定的命令。它可以将输入数据分割为单个参数,并将这些参数传递给命令进行处理。xargs
通常用于处理文件列表、批量执行命令等场景。awk
:是一种强大的文本处理工具,用于从输入文本中提取和处理数据。它基于行进行操作,并可以根据指定的规则和模式进行数据匹配、转换和输出。awk
通常用于处理结构化文本数据、数据分析和报告生成等任务。
-
数据处理:
xargs
:将输入数据作为参数传递给命令,每个参数通常是以空格或换行符分隔的文本。xargs
可以根据需要对输入进行分割和重组,然后将其传递给命令进行处理。awk
:以行为单位处理输入数据,可以根据指定的字段分隔符对每一行进行分割,并对每个字段进行操作。awk
提供了丰富的内置函数和操作符,可以进行数据过滤、转换、计算和格式化等操作。
-
使用场景:
xargs
:适用于需要将输入数据作为参数传递给命令进行处理的场景,如批量执行命令、删除文件、移动文件等。awk
:适用于需要对结构化文本数据进行处理和分析的场景,如数据提取、数据转换、数据筛选、报告生成等。
总结而言,xargs
主要用于处理命令行参数,将输入数据作为参数传递给命令执行,而awk
主要用于处理文本数据,对每一行进行分割和操作。它们在功能和使用场景上有所不同,可以根据具体需求选择合适的工具。