使用输入字符串和通配符的一部分cd到特定目录

时间:2016-01-08 18:26:26

标签: bash wildcard

我在不同的目录中有多个文件。他们看起来像这样

/home/usr/data/folder_K123_A01/file/Sample_K123_1_ID33/K123_1_ID33.txt
/home/usr/data/folder_J337_B02/file/Sample_J337_4_ID46/J337_4_ID46.txt
/home/usr/data/folder_L711_C03/file/Sample_L711_13_ID07/L711_13_ID07.txt

A01B02C03由机器生成;不太具体。它可以使用*自动填充这些值。

如果我想转到L711_13_ID07目录,我会使用

cd /home/usr/data/folder_L711*/ -> tab, enter
cd /file
cd /Sample_L711_13_ID07

现在,需要快速在这些目录之间移动。因此,尝试撰写脚本movequick.sh以快速将输入filenamescd带到每个目录。

目前的代码是

Filename=$1
FD=`echo $Filename|cut -f1 -d'_'`;
cd /home/usr/data/folder_$FD_*/file/Sample_$Filename/

我做

./movequick L711_13_ID07

但是,系统给了我

line 3: cd: /home/usr/data/folder_L711_*/file/Sample_L711_13_ID07/: No such file or directory

我想我错过了一个标签。我也试图将这个脚本放到我的.bashrc中,以确保我可以快速移动。

需要一些建议。感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用:

filename="$1"
fd="${filename%%_*}"
cd /home/usr/data/folder_"${fd}"_*/file/Sample_"${filename}"/

在此变量名称和${fd}之后使用_时使用_很重要。在变量名$fd_中,下划线被视为变量名称的一部分。

答案 1 :(得分:0)

当文件夹生成一次并在此之后修复时,您可以设置一堆别名,如

cdk123="cd /home/usr/data/folder_K123_A01/file/Sample_K123_1_ID33/K123_1_ID33.txt"
cdj337="cd /home/usr/data/folder_J337_B02/file/Sample_J337_4_ID46/J337_4_ID46.txt"
cdl711="cd /home/usr/data/folder_L711_C03/file/Sample_L711_13_ID07/L711_13_ID07.txt"

将这些放在.bashrc中,登录后(或获取文件)可以使用cdk123之类的内容。
在登录会话期间修复文件夹后,您可以从.bashrc生成这些别名 在会话期间变量时,可以在cd命令中使用通配符:

cd /home/usr/data/*/*/*L711_13_ID07

您是否想要使用TAB,您无需一直使用输入: 如果要移至L711_13_ID07的目录,请使用

cd /home/usr/data/folder_L711 - >标签f - >标签S - >选项卡ENTER 在尝试使用脚本之前使用选项卡选项进行播放。当bash不知道你想要哪个文件/文件夹时(两个dirs都以f开头),再次点击标签:在2个标签后你会看到一个可能的列表。添加一些字母并再次点击标签。

如果您的历史记录中有cd命令,请尝试^r cd并点击^r直到看到某些内容。