【问题标题】:Delete File, If End Characters Don't Match删除文件,如果结束字符不匹配
【发布时间】:2016-09-01 17:35:27
【问题描述】:

我正在尝试从/Dir1 中删除/Dir2 中不存在的文件。问题是前几个字符匹配,但最后几个字符不匹配。例如。

/Dir1
abc_def.png
xyz_xyz.png

/Dir2
abc_ghi.png

只要“abc”匹配,我不想删除文件,即使最后几个字符不同。我要删除的唯一文件是xyz.png,因为它在/Dir2 中不存在。我该怎么做呢?

【问题讨论】:

  • 如果/Dir2 有文件ghi_abc.png 怎么办? /Dir1中的abc_def.png不会被删除吗?
  • 正确,不会被删除。我希望它依赖于前三个字符。
  • 依赖于/Dir1中文件下划线前的文件名第一部分?
  • 是的,文件名的第一部分。
  • 所以如果/Dir1 有文件1234_test.png 并且/Dir2test_5678.png/Dir1 中的文件将被删除——只是确认这就是你的意思。

标签: bash pattern-matching match matching string-matching


【解决方案1】:

假设您想在第一个下划线之前匹配文件名的一部分(如您的示例中所示),您可以使用以下代码:

cd /Dir1

for f in *_*; do
    [[ -f /Dir2/"${f%%_*}"* ]] || echo rm "$f"
done

一旦满意,在rm 之前删除echo

【讨论】:

  • d%% 代表什么?这就像一个占位符,无论字符是什么?
  • 不,最终会回显所有文件。
  • 我刚刚在每个目录的 ls 之间运行了一个差异,但这也最终删除了所有文件,因为最后一个字符不同。
  • 与最后一个字符无关。此脚本假定您要在第一个下划线之前匹配文件名的一部分。
猜你喜欢
  • 2021-04-17
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 2019-12-17
  • 2022-10-15
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多