cd 最后一个文件夹 tcsh

cd 最后一个文件夹 tcsh

尝试 cd 到 bash 中的最后一个目录

如果我尝试这个:

cd $(ls -l | tail -l)

它将导致:

Illegal variable name.

我不知道该怎么做

答案1

$(...)是 Korn/POSIX shell 语法。 (t)csh 中的命令替换是通过`...`.

在 中tcsh,你可以这样做:

set dirs = (./*/); cd $dirs[$#dirs]:q

进入cd当前目录中非隐藏目录的词法列表中的最后一个目录(或目录的符号链接)。

这比:

cd "`ls | tail -n 1`"

如果文件名包含换行符或以-(或+后跟数字)开头,或者当前目录中的最后一个文件不是目录,则该方法不起作用。

您的 Ksh 语法cd $(ls | tail -1)更糟糕,因为它也会因文件名包含空格、制表符或通配符而失败。

请注意,顺序是词汇顺序,例如2排序 10。对于数字排序,通过 GNU 实现ls,您可以使用-v选项 ( cd "`ls -v | tail -n 1`")

使用zshshell,你可以这样做:

cd ./*(/[-1])

或者也考虑目录的符号链接:

cd ./*(-/[-1])

要按数字对文件进行排序:

cd ./*(n-/[-1])

答案2

导致错误的原因是您获得的字符串不是目录的名称,而是包含有关目录的一些信息的字符串,drwxrwxr-x. 3 alessiosavi alessiosavi 4096 Sep 10 09:51 workplace-tmp而不是您的目标名称workplace-tmp

为了完成这项工作,我们可以运行以下步骤:
1. 将最后一个目录保存在变量中
2. 检查变量是否是一个目录
3. cd 进入该目录

file=$(ls -l  | tail -n1 | awk '{print $9}') ; if [ -d "$file" ];then cd $file; else echo "$file not a directory" ; fi

“是 bash,你只需要 1 行”

相关内容