分页: 1 / 2
菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-16 22:49
由 awu
问题如下:
我有不确定名字的目录无数个:A,B,C,D,等等,这些目录都会很深,而且放的地方也不尽相同,比如A可能放在home下,B可能放在home/version1/下,等等;所做的常规性的操作之一就是进入一个很深的地方后,要再退回到A下,或B下,etc。。。这样我经常cd ..半天才能退出来。。。。
但这些目录有一个共同的特征就是无论是A还是B还是C等,它们的子目录和结构都是基本相同的,所有都能在它们下面找到一个相同的目录X,而且别的地方没有。
能不能写一个脚本,从任意深的地方一下子退到A或B或C下?只要判断X存在就可以了。
尝试了一天了也搞不定,主要是不会改变目录。。。在脚本中调用cd ..或都cd <绝对路径>都对当前console中shell的提示符没有任何影响啊?我也尝试了设置PWD变量,也没有用。。。
不知道有没有什么好办法?或都我的办法有问题?

Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-16 23:27
由 qiang_liu8183
换zsh
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 1:39
由 awu
这个。。。。bash是俺的工作环境中强制使用的,换不了。。。
zsh能实现上面的功能?
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 8:34
由 eexpress
别信zsh。那也是嘛都要自己动手的。在bash,你的支持很多。
你这要求,大概pushd popd就可以。常用的深目录,直接alias一个命令也可以。
如果目录位于固定位置,设置cdpath更方便,直接cd xx<tab>就可以补全。
从X特征目录来说。
你简单的locate X 就是。可以从这点,写一个脚本(比如 cdx.bash)。显示locate结果,然后提示选择数字,固定跳转到这ABCD几个目录。
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 9:27
由 link_01
看你的描述,A/B都是接近顶级目录, 很深的话试试重新cd A/B, 替换跳出目录
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 10:13
由 gzbao9999
代码: 全选
vava@vava:/usr/local/bin$ more showXmother
#!/bin/bash
#find这行 根据实际情况自行修改
find ~/ -name target -type d|grep -Po '^.*/'> ~/.mytemptemp;
cat -n ~/.mytemptemp;
代码: 全选
vava@vava:/usr/local/bin$ more mycd
#!/bin/bash
cd `sed -n $1p ~/.mytemptemp`;
两个都丢在/usr/local/bin/下 chmod a+x
用的时候
先在命令行中执行 showXmother
根据内容中的行号
输入 source mycd n (n代表行号) (输入 . mycd n也可以)
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 10:42
由 eexpress
千年不动的目录,居然用find。。。。不是找麻烦嘛。
用locate
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 13:55
由 awu
eexpress 写了:别信zsh。那也是嘛都要自己动手的。在bash,你的支持很多。
你这要求,大概pushd popd就可以。常用的深目录,直接alias一个命令也可以。
如果目录位于固定位置,设置cdpath更方便,直接cd xx<tab>就可以补全。
从X特征目录来说。
你简单的locate X 就是。可以从这点,写一个脚本(比如 cdx.bash)。显示locate结果,然后提示选择数字,固定跳转到这ABCD几个目录。
实际上我这个脚本是不针对常用目录的,因为可能会有无数个人用,每个人把这些目录起的名字会五花八门(只是这些目录下的子目录结构相同),放在地方也会五花八门。。。所以我只是想求一个能在bash脚本里改变shell当前目录的办法。
谢谢楼上各们啊啊啊

Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 14:12
由 trigger
~$ curr=`pwd`
~$ cd srclip/work/adir/
~/srclip/work/adir$ cd $curr
~$
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 23:15
由 aerofox
写了个脚本,把它 source 之后应该就可以实现楼主要的功能了,但是要是我自己用,我不希望在 cd 命令中自动执行 update_cd_cache,因为这太费时了。脚本如下:
代码: 全选
#!/bin/bash
CD_CACHE_FILE=~/.cd_cache
function update_cd_cache()
{
CD_SEARCH_ROOT=/home
echo "Update cd cache file..." 1>&2
find "$CD_SEARCH_ROOT" -type d -name X -printf "%h\n" -prune > $CD_CACHE_FILE 2> /dev/null
}
function cd()
{
if ! command cd "$@" 2> /dev/null; then
if [[ ! -f "$CD_CACHE_FILE" ]]; then
update_cd_cache
elif [[ -r "$CD_CACHE_FILE" ]]; then
local cd_targ="${@:0-1}"
retval=
while read cache_dir; do
if [[ "${cache_dir##*/}" == "$cd_targ" ]]; then
command cd "$cache_dir"
retval=$?
break
fi
done < "$CD_CACHE_FILE"
if [[ -z "$retval" ]]; then
update_cd_cache
while read cache_dir; do
if [[ "${cache_dir##*/}" == "$cd_targ" ]]; then
command cd "$cache_dir"
retval=$?
break
fi
done < "$CD_CACHE_FILE"
fi
[[ -z "$retval" ]] && echo "cd: $cd_targ: No such directory" 1>&2
return ${retval:-2}
fi
fi
}
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 23:20
由 冲浪板
lz开黑窗口,然后开鹦鹉螺(是这个吧?),然后拉文件夹到黑窗口....
在win里就是那么用的说
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-17 23:41
由 davidlone
来学习的,顺便围观05年的潜水艇。
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-08-19 16:35
由 awu
看起来好强大啊,就是没看懂。。。。呵呵
aerofox 写了:写了个脚本,把它 source 之后应该就可以实现楼主要的功能了,但是要是我自己用,我不希望在 cd 命令中自动执行 update_cd_cache,因为这太费时了。脚本如下:
代码: 全选
#!/bin/bash
CD_CACHE_FILE=~/.cd_cache
function update_cd_cache()
{
CD_SEARCH_ROOT=/home
echo "Update cd cache file..." 1>&2
find "$CD_SEARCH_ROOT" -type d -name X -printf "%h\n" -prune > $CD_CACHE_FILE 2> /dev/null
}
function cd()
{
if ! command cd "$@" 2> /dev/null; then
if [[ ! -f "$CD_CACHE_FILE" ]]; then
update_cd_cache
elif [[ -r "$CD_CACHE_FILE" ]]; then
local cd_targ="${@:0-1}"
retval=
while read cache_dir; do
if [[ "${cache_dir##*/}" == "$cd_targ" ]]; then
command cd "$cache_dir"
retval=$?
break
fi
done < "$CD_CACHE_FILE"
if [[ -z "$retval" ]]; then
update_cd_cache
while read cache_dir; do
if [[ "${cache_dir##*/}" == "$cd_targ" ]]; then
command cd "$cache_dir"
retval=$?
break
fi
done < "$CD_CACHE_FILE"
fi
[[ -z "$retval" ]] && echo "cd: $cd_targ: No such directory" 1>&2
return ${retval:-2}
fi
fi
}
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-09-14 20:03
由 huanhai2006
你改一下CDPATH的值,可以直接改为home,然后用cd就可以了。
Re: 菜鸟有一个关于改变目录的需求,怎么实现啊
发表于 : 2010-09-14 20:49
由 BigSnake.NET
符号链接