2011-07-12 97 views
0

bash脚本是我的脚本的例子:使用通配符

#!/bin/bash 
cd /upper/folder.test*/subfolder 
ls 

的folder.test文件夹5事实上名为类似“folder.test13kwekrjk1234jk3”,它是完全随机的,所以我想用通配符。 “上”文件夹在根目录中,我想要它和CD命令在脚本之外工作(并且我正在根目录中执行它,就像脚本一样)

但是,当我执行(使用。 /),它给了我:

“ - 没有这样的文件或目录] CD:/upper/folder.test*/subfolder”

是怎么回事?它在脚本之外工作,但不会在脚本内工作?我应该在剧本中以不同的方式做到这一点吗?

+0

我不能让这个失败像你有它,但也要注意,你所拥有的脚本只会在第一次出现时才会“ls”,而不是其他时间。然而,像ls/upper/folder.test * /子文件夹这样的东西可以工作。另外,你使用的是什么操作系统或版本的bash? –

+0

它适用于我的bash版本。你有多个目录与模式匹配吗? – Nicolas

+0

这不是一个混淆通配符与文件名* globbing *的情况吗?像'ls/upper/folder.test */subfolder'这样的东西可以工作,因为星号的外壳扩展,但在'cd'命令中扩展是没有意义的。你只能'cd'到*一个*文件夹 – pavium

回答

2

你可以这样做,因为通配符是字面上的通配符,它​​们的行为很难预测并且不太可靠。

FOLDER=$(ls -1 /upper/folder.test*/subfolder | head -n1); 
cd "$FOLDER" 
ls 
+0

只是一个暗示,'-1'是多余的,只要'ls's标准输出不是终端,它就会将格式设置为单列,颜色。 – carlpett

+0

还有一点需要注意的是,如果你试图用这个来检测一个目录路径,你还需要'-d'标志到'ls'。至少在Centos 5.x中,无论如何。 – pospi

0

我曾经有一个相关的问题,当我尝试使用“〜”在bash脚本中cd到我的主目录时。

此代码工作在终端,但不是在我的脚本:

cd ~/Documents/important_folder* 

但是,下面的代码在脚本运行良好:

cd /home/my_username/Documents/important_folder*