【问题标题】:Entering a directory whose name matches a substring输入名称与子字符串匹配的目录
【发布时间】:2017-03-25 15:56:41
【问题描述】:

我想在一个 for 循环中输入几个目录。我没有目录的完整名称,只有其中的一部分。

我想做一些你在终端上写的东西,比如cd *IncompleteDirName*

这是循环的 MVE:IncompleteDirName 是从文件 IncompleteDirNames 中获得的。

cont=1
sum=1
while read anotherFILE; do

        IncompleteDirName=$(sed "${cont}q;d" IncompleteDirNames)

        cd *"${IncompleteDirName}"*
        #  Do stuff
        cd ..
        cont=$((cont + sum))
done <anotherFILE

这不起作用,我不知道这是否与通配符未扩展或变量无法正常工作有关。

它向我抛出了这个错误消息:

*: 没有这样的文件或目录

我想这意味着星号没有按预期工作。它没有进入目录,并且有一个匹配每个模式的目录。无论如何,没有目录被输入。

这是IncompleteDirNames 文件的样子:

Alicante Almeria Andalucia Avila

这是一列名称。 这些是上面IncompleteDirNames对应的目录名:

aa4fas_Alicante_com mun_Almeria comunidadde_Andalucia ciuAvila

【问题讨论】:

  • “不工作”是什么意思?我无法准确理解这里发生了什么,因为这是一个实际上并没有运行的示例。子字符串在文件中,这些子字符串是目录名称的一部分,并且您想在每个目录中“做一些事情”,这些目录与位于 FILE 的子字符串部分匹配?如果一个子字符串匹配多个目录怎么办? codep-ca 文件里面有什么?
  • 我确定没有多个目录匹配。我已经更正了代码。
  • 您需要澄清什么不起作用。有一件事是肯定的:如果您的不完整名称可以匹配许多目录,并且您想在每个目录中执行某些操作,那么您需要一个循环。您还需要为没有目录匹配的情况做好准备,这在您的暂定代码中会导致“cd”命令失败,但不会阻止执行“Do stuff”部分。
  • 感谢您的更新。还不清楚。您能否向我们展示FILE 中的内容以及IncompleteDirNames 中的内容的样本?您是否尝试过,在 cd 行之前,与您 CD 相同的内容的 echo,以确保您尝试更改为您打算更改的内容?
  • @ghoti 是的,我有,echoes 是不完整的目录名称,但以星号开头。

标签: bash wildcard


【解决方案1】:

试试这个代码 -

cont=1
sum=1
while read FILE; do

        IncompleteDirName=$(sed "${cont}q;d" FILE)

        cd *"${IncompleteDirName}"*
        #  Do stuff
        cd ..
        cont=$((cont + sum))
done <IncompleteDirNames

【讨论】:

  • 不,这不是问题,while 循环另一个文件,并且必须保持这样。
  • 您能否检查在您尝试执行 while 循环/脚本的目录中是否有类似“FILE”的文件,因为当您粘贴错误详细信息时 - *: No such file or directory 表示该文件是在您想要循环的地方不可用(在您的代码中,文件名是“FILE”)
  • 有,我刚查过了。
  • 然后在你的sed命令中提到文件IncompleteDirNames的完整路径并尝试。
  • 完成。无论如何,我已经回应 IncompleteDirName 并且它正确存储了名称。问题与星号不是通配符有关,而是作为星号本身
【解决方案2】:

您可以执行以下操作:

#!/bin/bash

while read -r line; do
  cd /absolute/path/to/*$line*
  # do stuff
done < filename

这将输入名称与filename 中的一行部分匹配的每个目录,并且“执行操作”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2017-03-19
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多