从列表文件中筛选并构建删除命令

cat "$deletes_filename" | sed 's/[[:cntrl:]]//g;' | grep -v "^$" | grep -v "^#" | xargs -I@ echo "find @ -printf 'remove %p\n' -delete" > "${deletes_script}"
这是一个在Unix或Linux shell中运行的命令组合,它主要用于处理一个名为`$deletes_filename`的文件,并生成一个名为`$deletes_script`的脚本,该脚本用于查找并删除特定的文件和目录。下面我会逐步解释这个命令组合的每一部分:

1. `cat "$deletes_filename"`:


   * `cat`命令用于显示文件的内容。这里它读取了`$deletes_filename`这个变量所指向的文件的内容。
2. `| sed 's/[[:cntrl:]]//g;'`:


   * `|`是管道符号,用于将一个命令的输出作为另一个命令的输入。
   * `sed`是一个流编辑器,用于对输入流(在这里是`cat`命令的输出)进行基本的文本转换。
   * `'s/[[:cntrl:]]//g;'`是一个sed命令,它删除了所有控制字符(例如换行符、制表符等)。`[[:cntrl:]]`是一个字符类,它匹配任何控制字符。`g`标志表示全局替换,即替换每一行中的所有匹配项。
3. `| grep -v "^$"`:


   * `grep`是一个用于搜索文本的命令。
   * `-v`选项表示反向匹配,即只输出不匹配指定模式的行。
   * `"^$"`是一个正则表达式,它匹配空行。因此,这个`grep`命令删除了所有空行。
4. `| grep -v "^#"`:


   * 又一个`grep`命令,使用`-v`选项和`"^#"`正则表达式来删除所有以`#`字符开始的行(通常是注释行)。
5. `| xargs -I@ echo "find @ -printf 'remove %p\n' -delete"`:


   * `xargs`命令用于将标准输入构建成命令行参数。
   * `-I@`选项告诉`xargs`,将每个输入项替换为`@`符号,这样我们可以在后面的命令中使用它。
   * `echo "find @ -printf 'remove %p\n' -delete"`:这部分命令会输出一个`find`命令,该命令使用`@`作为占位符,代表`xargs`提供的每个输入项。`find`命令会查找每个输入项指定的路径,并使用`-printf`选项输出一个字符串,然后执行`-delete`选项来删除找到的文件或目录。
6. `> "${deletes_script}"`:


   * 最后,`>`重定向符号将上述命令的输出写入`$deletes_script`这个变量所指向的文件中。

**举例说明**:

假设`$deletes_filename`包含以下内容:
/path/to/dir1
/path/to/dir2
# This is a comment
/path/to/file1
经过上述命令处理后,`$deletes_script`将包含以下内容:
find /path/to/dir1 -printf 'remove %p\n' -delete
find /path/to/dir2 -printf 'remove %p\n' -delete
find /path/to/file1 -printf 'remove %p\n' -delete
这个脚本可以被执行,以删除`/path/to/dir1`、`/path/to/dir2`和`/path/to/file1`这三个路径对应的文件或目录。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在tar命令,可以使用正则表达式筛选要压缩的文件,以便只压缩与正则表达式匹配的文件。具体来说,可以使用 `--exclude` 和 `--include` 选项来实现。 `--exclude` 选项用于指定一个正则表达式,表示要排除的文件或目录,不进行压缩。例如,要排除以 .log 结尾的所有文件,可以使用以下命令: ``` tar -czvf archive.tar.gz --exclude='*.log' /path/to/directory ``` 在这个命令,`--exclude='*.log'` 表示要排除所有以 .log 结尾的文件。 `--include` 选项与 `--exclude` 选项类似,但是它用于指定要包含的文件或目录,而不是要排除的。例如,要只压缩以 .txt 结尾的所有文件,可以使用以下命令: ``` tar -czvf archive.tar.gz --include='*.txt' /path/to/directory ``` 在这个命令,`--include='*.txt'` 表示只包含所有以 .txt 结尾的文件。 需要注意的是,在使用 `--exclude` 和 `--include` 选项时,需要将它们放在所有选项的最后面,并且要确保正则表达式被引号引起来,以防止它们被 shell 解释。 ### 回答2: 在tar压缩命令,可以通过使用正则表达式来筛选文件,以便只选择特定的文件进行压缩。正则表达式是一种用来描述匹配字符串模式的工具,在tar命令,正则表达式可以用来过滤文件名。 例如,假设我们要压缩一个目录下的所有以“.txt”结尾的文件,可以使用如下命令: tar -czvf archive.tar.gz --exclude='*.*' --include='*.txt' directory/ 在上述命令,--exclude参数用于排除所有文件,--include参数用来筛选出以“.txt”结尾的文件。注意,在使用正则表达式时,我们使用了通配符“*”来表示零个或多个字符。同时,我们采用了gz压缩格式,并使用-v参数来显示压缩过程的详细信息。 另外,如果需要同时压缩多种类型的文件,可以在--include参数使用多个正则表达式,用空格分隔。 此外,还可以使用其他正则表达式的元字符,如“?”表示匹配一个字符、“+”表示匹配一个或多个字符、“{n}”表示匹配n个字符等,来更精确地筛选文件。 总而言之,通过在tar压缩命令使用正则表达式,我们可以方便地筛选和压缩特定类型的文件,提高文件操作的效率。 ### 回答3: 在tar压缩命令,我们可以使用正则表达式来筛选需要压缩的文件。 在tar命令,使用`--exclude`参数可以指定要排除的文件或目录。可以结合正则表达式的语法来指定需要排除的文件。 假设我们有一个目录,其包含多个文件,我们想要将其以".txt"结尾的文件进行压缩,而忽略其他文件。 可以使用以下命令: ``` tar -czvf archive.tar.gz --exclude='!(*.txt)' directory/ ``` 其,`archive.tar.gz`是压缩文件的名称,`directory/`是要压缩的目录。 `--exclude='!(*.txt)'`的含义是排除所有不以".txt"结尾的文件和目录。 通过使用正则表达式`!(*.txt)`,我们可以筛选出".txt"结尾的文件,其他文件将被忽略。 这样,只有以".txt"结尾的文件会被包含在压缩文件,其他文件都会被排除。 使用tar命令配合正则表达式,我们可以灵活地筛选指定类型的文件进行压缩,提高了操作的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值