【问题标题】:Use grep to find a folder and then rename it [closed]使用 grep 查找文件夹,然后重命名它[关闭]
【发布时间】:2020-10-28 18:50:13
【问题描述】:

你好,我在这个话题上挣扎了一段时间

我有一个包含很多子文件夹的文件夹。其中一个名称中有“地图”,但可以称为 '12303934Map7899hhh'。每次都不一样,没有特定的结构。

使用ls | grep Map 可以显示此文件夹。 但现在我希望搜索结果将始终直接命名为“地图”而跳过其余部分。我该怎么做?

【问题讨论】:

  • 注意:在 Unix/BSD/Linux 中,术语是“目录”,而不是 Windows 用户定义的“文件夹”术语,这不是一回事。

标签: linux unix command-line grep rename


【解决方案1】:

你的意思是这样的?

mv *Map* Map

示例 shell 会话:

joni@tammi:/tmp/base$ mkdir 12303934Map7899hhh
joni@tammi:/tmp/base$ ls -F # Let's see if it exists...
12303934Map7899hhh/
joni@tammi:/tmp/base$ mv *Map* Map
joni@tammi:/tmp/base$ ls -F  # Let's see if it was renamed...
Map/

Grep 真的不是在这里使用的正确工具。如果您出于某种原因需要在解决方案中以某种方式使用 grep,您可以这样写:

mv "$(ls | grep Map)" Map

这个解决方案有一些缺陷。例如,可以创建一个包含嵌入式换行符的文件名,grep 会将其分开。下面的 cmets 提出了更好的解决方案。

【讨论】:

  • 是的,但它应该只是重命名,因为名为“地图”的新文件夹不存在
  • 我不想让它作为子文件夹
  • mv 重命名文件和目录。你不把它作为“子文件夹”是什么意思你想把它移出当前目录吗?你能在问题中解释这些额外的要求吗?
  • 您建议的代码行不起作用。它说“没有名为 Map 的目录”。我希望每个名称中包含“地图”一词的目录都重命名为“地图”。
  • 是的printf '%s\0' * | grep -z 比解析ls 的输出要好(参见mywiki.wooledge.org/ParsingLs)但这不是正确的方法,所以如果老师要求它,他们需要反馈如果学生认为这是一个很好的答案,那么他们需要在提交作业之前知道它不是。我们经常让人们询问如何使用完全不合适的工具来做某事,告诉他们应该如何避免(但没有解释为什么不这样做)。
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 2018-05-04
  • 2013-02-15
  • 2014-08-10
  • 2020-08-05
  • 2013-05-23
  • 2022-08-22
相关资源
最近更新 更多