通常,我的项目在文件系统的深处都有一个SCSS + Compass目录。
例如,我的所有项目都位于~/Web/com.example.subdomain
下,有时样式目录为~/Web/com.example.subdomain/trunk/docroot/_assets/locked/styles
。
每天多次输出整个CD命令显然有点重复。我可以为每个项目创建一个别名(例如alias cd-com.marketo.subdomain-scss="..."
),但必须为所有25个以上的项目添加和维护。
$ cd ~/Web/com.example
$ cd-compass
find .
命令查找config.rb
或.sass-cache/
.sass-cache/
不存在且config.rb
有,则会compass stats /the/dir
运行
Nothing to compile. If you're trying to start
... .sass-cache/
目录添加包含指南针命令的功能,因此输入
cd-compass compile --force
将遵循上面的流程(包括cd进入目录),然后执行compass compile --force
在这种情况下,命令可能是
compass-do
或fcompass
或lcompass
(f = find; l = locate)。
如果找到多个Compass安装,请显示编号的选项列表。输入其中一个数字并按Enter键将继续该选项。
这基本上允许我输入:
$ cd-compass
1. /home/user/Web/git/com.example/trunk/docroot/admin/styles/compass
2. /home/user/Web/git/com.example/trunk/docroot/styles/compass
3. /home/user/Web/svn/com.example.sub/trunk/docroot/_assets/locked/styles
Which one? > __
答案 0 :(得分:1)
这并不能完成您想要的所有事情 - 例如,它不会构建.sass-cache如果它缺失但是它应该直接扩展它这样做(读者的练习:-)。如果目录名中有空格,它也将无效。
对于shell别名来说,这确实有点大。
首先,您需要将所有潜在目录放入变量
dirs=$(find . -name config.rb -o \( -type d -name .sass-cache \) | sed -e 's,/.sass-cache$,,' -e 's,/config\.rb$,,' | sort | uniq -c | grep '^ *2 ' | sed -e 's/^ *2 //')
这个位调用find来查找名为config.rb的任何文件或名为.sass-cache的目录。然后用sed剥去路径的最后一部分以获取目录名,对结果进行排序并计算简单结果路径的数量。然后只提取出现两次的目录,并从目录的开头删除计数......并且“嘿presto!”我们有一个Compass目录列表
然后计算它们中有多少:
count=0 ; for i in $dirs ; do : ; count=$((count+1)) ; done
或者你可以通过回显dirs变量并将其输送到“wc -w”来获得计数
然后你去处理不同的可能的计数值
if [ $count -eq 0 ] ; then echo no compass directory found; exit ; fi
if [ $count -eq 1 ] ; then cd $dirs ; exit ; fi
if [ $count -gt 1 ] ; then idx=1 ; for i in $dirs ; do echo $idx $i; idx=$((idx+1)) ; done ; fi
while true
do
echo -n "enter directory number: "
read choice
if [ $choice -gt $count ]
then
echo "invalid choice"
else
idx=1
for i in $dir
do
if [ $idx -eq $choice ]
then
cd $i ; exit
fi
idx=$((idx+1))
done
fi
done
答案 1 :(得分:1)
Z解决了在命令行上快速跳转到目录的更普遍的问题。它通过构建一个你cd到的目录数据库来做到这一点,并通过" frecency"对它们进行排名。 - 基于频率和新近度的综合得分。
访问某些目录后,您会使用z
后跟一个或多个子字符串跳转到它们。例如,要访问我的gitolite管理存储库,我只需输入z gito
。