我想在 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 世界,大小写并不重要。您可以有一个名为
A
and的目录cd a
(或者任何 Windows 等效目录),它将带您进入该目录。缺点是,A
在 Windows 系统上调用目录意味着不能a
在同一目录中调用目录。在 Unix 系统上,这不适用。cd ~/documents
在您的计算机上可能会失败(除非您documents
的主文件夹中确实有一个名为的目录),因为第一个字母不是大写的。
但正如您从我的示例脚本中看到的那样,脚本的这一部分绝对有效。