【发布时间】:2018-03-25 22:40:56
【问题描述】:
我正在尝试找出一种在命令行中搜索和替换的方法。该解决方案最好在 tcsh 中运行。这就是我想做的事情。
$ echo $PWD
/projects/apples/001/0440/my/files/are/here/
$ cd 0999
/projects/apples/001/0999/my/files/are/here/
$ cd oranges
/projects/oranges/001/0999/my/files/are/here/
$ cd were
/projects/oranges/001/0999/my/files/were/here/
脚本将从行尾开始搜索并找到匹配目录结构的第一个匹配项,然后 cd 进入该目录。
我精通python,用这种语言编写这个脚本很容易,但是python在一个进程中运行,因此更改一个进程的当前目录对其他现有进程的当前工作目录没有影响。
编写这样一个脚本的最佳方法是什么?完成这项任务的最有效方法是什么?我的目录结构可能会变得非常大,包含数千个文件夹,因此需要快速。
【问题讨论】:
-
编写你提到的python程序,但让它打印出目录名称而不是尝试更改cwd。然后,您可以使用
tcsh等效于以下sh命令:cd "$( prog.py )" -
- 显然您可以创建一个名为
cd的 shell 函数来为您执行此操作,以便您每次都可以编写cd 0999而不是cd "$(myprog 0999)" -
选择一个外壳。如果您想要一个 tcsh 答案,请不要标记 bash ——它们完全和完全不兼容。
-
顺便说一句,在 bash 中这样的实现可能看起来像
cd() { command cd "$@"; local subdir; IFS= read -r -d '' subdir < <(find . -name here -type d -print0 -exit); [[ $subdir ]] && cd "$subdir"; }-- 尽管我强烈、强烈、强烈建议不要这样做.这样做会破坏很多的脚本和习语,并且在切换到下面有深层结构的目录时运行速度也会非常慢。