输入名称与子字符串匹配的目录

输入名称与子字符串匹配的目录

我想在 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

这是一列名称。这些是与上面的 s 对应的目录名称IncompleteDirName

aa4fas_Alicante_com
mun_Almeria
comunidadde_Andalucia
ciuAvila

答案1

脚本的这一部分肯定有效,您可以通过执行此测试脚本轻松找到它:

#/bin/sh
cd
IncompleteDirName="ment"
cd *"${IncompleteDirName}"*
date > testFile

第一行是 shebang。第二行切换到您的主目录。应该有一个名为 的文件夹Documents。第三行将变量定义IncompleteDirName为 的子字符串Documents。第四行是从脚本中复制的。第五行将当前数据写入文件的testFile当前位置。

您将看到文件夹testFile中出现一个文件Documents

问题可能是你的脚本中有一些不同的东西,正如 Rakesh Sharma 已经在他的答案或你如何使用它中指出的那样。我认为这些可能的情况是:

  • 有些角色看起来很相似甚至相同。例如,Α是大写字母 alpha,而不是拉丁语A。如果您在此页面上搜索A并突出显示所有结果,A则会突出显示但Α不会突出显示。同样,可能不存在匹配项,因为您认为是目录名称的子字符串实际上并不是该目录名称的子字符串。
  • 资本化问题。如果您来自 Windows 世界,大小写并不重要。您可以有一个名为Aand的目录cd a(或者任何 Windows 等效目录),它将带您进入该目录。缺点是,A在 Windows 系统上调用目录意味着不能a在同一目录中调用目录。在 Unix 系统上,这不适用。cd ~/documents在您的计算机上可能会失败(除非您documents的主文件夹中确实有一个名为的目录),因为第一个字母不是大写的。

但正如您从我的示例脚本中看到的那样,脚本的这一部分绝对有效。

相关内容