Linux笔记之删除指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件

这篇具有很好参考价值的文章主要介绍了Linux笔记之删除指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

code review!

1.Linux笔记之删除指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件

这段代码是使用C++语言编写的,它执行了一系列命令来删除指定目录下的旧文件。让我逐行解释代码的功能:

  1. 首先,声明并初始化了一个名为cmdstd::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`命令,从而删除相应的文件。
    
    
  2. 接下来,使用system函数执行存储在cmd变量中的命令。

    system(cmd.c_str());
    ```
    
    ``cmd.c_str()`将`cmd`变量转换为C风格的字符串,然后`system`函数将该字符串作为参数传递给操作系统来执行对应的命令。
    
    

综上所述,这段代码的作用是列出指定目录下以.pack为扩展名的文件,根据修改时间的倒序排列,然后删除除最新修改的文件之外的所有文件。

2.将指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件移动到另一个目录

这段代码是使用C++语言编写的,它执行了一系列命令来移动指定目录下的旧文件到另一个目录。让我逐行解释代码的功能:

  1. 首先,声明并初始化了一个名为cmdstd::string变量,用于存储要执行的命令。命令的内容是一个字符串,它由多个子命令以管道符(|)连接而成。

    std::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`:这是一个变量,用于指定目标目录的路径。它将被拼接到命令的末尾,表示要将文件移动到这个目录。
    
    
  2. 接下来,使用system函数执行存储在cmd变量中的命令。

    system(cmd.c_str());
    ```
    
    ``cmd.c_str()`将`cmd`变量转换为C风格的字符串,然后`system`函数将该字符串作为参数传递给操作系统来执行对应的命令。
    
    

综上所述,这段代码的作用是列出指定目录下以.pack为扩展名的文件,根据修改时间的倒序排列,然后将除最新修改的文件之外的所有文件移动到另一个目录。

3.xargs:用于从标准输入中读取数据,并将其作为参数传递给指定的命令

xargs是一个命令行工具,用于从标准输入中读取数据,并将其作为参数传递给指定的命令。它可以将输入数据分割为单个参数,并将这些参数传递给命令进行处理。让我们详细解释xargs的用法和功能。

基本语法:

xargs [选项] [命令]

常用选项:

  • -I{替换字符串}:指定一个占位符,用于替换输入中的每个参数。通常使用{}作为占位符,可以在命令中多次出现以表示不同的参数位置。
  • -n 数字:指定每次执行命令时传递的参数个数。默认情况下,xargs将尽可能多地传递参数,但可以使用-n选项限制每次传递的参数个数。
  • -t:显示要执行的命令,但不实际执行。
  • -p:在执行每个命令之前提示用户确认。

使用示例:

  1. 基本用法:将输入作为命令参数传递。

    echo "file1 file2 file3" | xargs rm
    ```
    上述命令将字符串`file1 file2 file3`通过管道传递给`xargs`,然后`xargs`将其作为参数传递给`rm`命令,相当于执行了`rm file1 file2 file3`。
    
    
  2. 通过-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/`。
    
    
  3. 限制每次传递的参数个数:

    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`命令。
    
    
  4. 从文件中读取参数:

    cat filelist.txt | xargs rm
    ```
    上述命令将文件`filelist.txt`的内容通过管道传递给`xargs`,然后`xargs`将每一行作为参数传递给`rm`命令,实现批量删除文件的功能。
    
    

这些只是xargs命令的一些常见用法,它还有其他选项和功能可以根据需要进行调整和使用。请注意,当使用xargs时,请确保输入的参数不包含特殊字符或空格,以避免意外行为。

4.xargs和awk区别

xargsawk是两个不同的命令行工具,它们在处理输入数据和执行操作时有一些区别。

  1. 功能:

    • xargs:主要用于从标准输入中读取数据,并将其作为参数传递给指定的命令。它可以将输入数据分割为单个参数,并将这些参数传递给命令进行处理。xargs通常用于处理文件列表、批量执行命令等场景。
    • awk:是一种强大的文本处理工具,用于从输入文本中提取和处理数据。它基于行进行操作,并可以根据指定的规则和模式进行数据匹配、转换和输出。awk通常用于处理结构化文本数据、数据分析和报告生成等任务。
  2. 数据处理:

    • xargs:将输入数据作为参数传递给命令,每个参数通常是以空格或换行符分隔的文本。xargs可以根据需要对输入进行分割和重组,然后将其传递给命令进行处理。
    • awk:以行为单位处理输入数据,可以根据指定的字段分隔符对每一行进行分割,并对每个字段进行操作。awk提供了丰富的内置函数和操作符,可以进行数据过滤、转换、计算和格式化等操作。
  3. 使用场景:

    • xargs:适用于需要将输入数据作为参数传递给命令进行处理的场景,如批量执行命令、删除文件、移动文件等。
    • awk:适用于需要对结构化文本数据进行处理和分析的场景,如数据提取、数据转换、数据筛选、报告生成等。

总结而言,xargs主要用于处理命令行参数,将输入数据作为参数传递给命令执行,而awk主要用于处理文本数据,对每一行进行分割和操作。它们在功能和使用场景上有所不同,可以根据具体需求选择合适的工具。文章来源地址https://www.toymoban.com/news/detail-755950.html

到了这里,关于Linux笔记之删除指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis-plus 根据指定字段 批量 删除/修改

    mybatis-plus 提供了根据id批量更新和修改的方法,这个大家都不陌生 但是当表没有id的时候怎么办) 这个就不说了,就是因为不想手写SQL 所以才有这篇博客 mybatis plus 的 executeBatch 参考 mybatis plus 的updateBatchById 方法. 调用处: 接口 重写方法 实现 这种写法其实批量的效率还是比较慢的

    2024年02月13日
    浏览(40)
  • Java文件操作(遍历目录中的文件,找到并删除有指定关键字的文件)

    对于通过java对文件继续读取和写入的操作推荐看读取文件和写入文件操作         扫描指定目录中的文件,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件         实际上题目就要求我们对一个指定的目录下的文件进行遍历

    2024年02月13日
    浏览(48)
  • Linux挂载磁盘到指定目录

    某天突然发现文件夹下的东西都没有了! 使用命令 lsblk 查看,发现果然磁盘 sda 掉了,没有挂载点。(Linux lsblk 命令用法详解-Linux命令大全(手册)) 最后一列的mount points就表示挂载点。 随即搜索怎么挂载!——【Linux】磁盘分区和挂载 很幸运挂载磁盘其实很简单,只需要一

    2024年02月14日
    浏览(44)
  • Linux :: 【基础指令篇 :: 文件及目录操作:(7)】:: cp:指定文件或目录的拷贝及指定拷贝到指定路径(与重命名)

    前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C++ 入门到入土!!!学习合集 Linux 从命令到网络再到内核!学习合集 目录索引: 1. 基本语法及功能 2. 常用可选项说明 3. 文件基本拷贝操作 - - 3.1 指定文件拷贝到当前

    2024年02月03日
    浏览(73)
  • Linux将新硬盘挂载到指定目录

    MBR分区最大2T,超过2T需用parted工具进行GPT分区 1. 查看当前所有硬盘 可以看到未分区的新硬盘/dev/sdd 2. 对新硬盘进行分区 输入“n”,按“Enter”,开始新建分区。 输入“p”,按“Enter”,开始创建一个主分区。 输入主分区编号“1”,按“Enter”。 选择分区空间起始点,直接

    2024年02月06日
    浏览(48)
  • Linux 权限设置 用户只能访问指定目录

    Linux每个文件和文件夹都有其用户和用户组,用户和用户组默认是创建者,一般情况下都是root。 命令 ls -al可查看,第一列是权限,第三列是用户,第四列是用户组。 主要思路是设置目录的权限为其他用户不可访问,只有设置指定的用户可访问。 将权限设置其他用户和其他组

    2024年02月09日
    浏览(56)
  • Linux配置sftp用户访问指定目录

    开发环境:Win 10 --  64位 服务环境:centos7 SSH:OpenSSH_7.4p1 需要root权限执行-------------------------- 为了方便后面添加用户 注: -g: 指定用户所属用户组 -s: shell, /usr/sbin/nologin表示禁止用户使用SSH登录,仅可用于SFTP登录 fileuser: 用户名 配置密码 注:此处目录的属主属组必须

    2024年02月01日
    浏览(34)
  • Linux :: 【基础指令篇 :: 文件及目录操作:(6)】:: rmidr / rm:删除空目录、删除非空目录及删除文件指令

    前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C++ 入门到入土!!!学习合集 Linux 从命令到网络再到内核!学习合集 目录索引: 1. rmdir / rm 基本语法及功能 2. rmdir 基本使用测试 (看操作代码) - - 2.1 创建一个空目录

    2024年02月05日
    浏览(48)
  • linux空磁盘挂载到指定目录操作步骤

    fdisk -l  或  lsblk 如图所示:/dev/sdb磁盘还未分区 执行fdisk /dev/sdb 按照下面步骤依次输入指令 mkfs.xfs /dev/sdb1 blkid mount 磁盘分区 目标目录 mount /dev/sdb1 /ynat/ 注:此挂载方式为临时挂载,重启服务器后,硬盘挂载消失; 首先通过blkid命令将分区的uuid查询出来并复制uuid(往/etc/fs

    2024年03月09日
    浏览(96)
  • Linux 解压tar.gz文件到指定目录

     如上例,/usr/local/src/下有一个tar包redis-6.2.5.tar.gz,要把它解压到 /tmp/redis/目录下。用-C选项参数就可以。注意,目标文件夹一定是要存在的,它不会自己创建不存在的文件夹。

    2024年02月12日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包