Bash 如何将cd放入排序后的第一个目录
我有一个文件夹,里面有目录Bash 如何将cd放入排序后的第一个目录,bash,shell,unix,ls,cd,Bash,Shell,Unix,Ls,Cd,我有一个文件夹,里面有目录 ABC_1 ABC_2 ABC_3 ABC_4 ABC_5 Test XYZ 我想按日期对它们进行排序,将名称中不包含ABC和cd的目录删除到第一个目录中 我试过了 cd $(/bin/ls -t1 | head -n 1) 这是行不通的。 任何帮助都将不胜感激 谢谢。这将只列出目录,并过滤掉任何不以ABC开头的文件夹: cd "$(ls -t1 -d */ |grep "^ABC_" |head -n1)" 更新: 你其实不需要grep 海报需要列表后的第一
ABC_1
ABC_2
ABC_3
ABC_4
ABC_5
Test
XYZ
我想按日期对它们进行排序,将名称中不包含ABC和cd的目录删除到第一个目录中
我试过了
cd $(/bin/ls -t1 | head -n 1)
这是行不通的。
任何帮助都将不胜感激谢谢。这将只列出目录,并过滤掉任何不以ABC开头的文件夹:
cd "$(ls -t1 -d */ |grep "^ABC_" |head -n1)"
更新:
你其实不需要grep
海报需要列表后的第一个结果,而不是根据修改时间的第一个结果,因此不需要“-t”选项 您还必须确保只提取目录而不是文件 这将满足您的要求:
cd $(ls -d [^ABC]*/ | head -n 1)
- $()运行命令
- ls-d目录搜索
- [^ABC]/不要包含任何以ABC开头的目录
- head-n1返回第一个条目
- cd更改到目录
grep
的,因为我误读了你的问题,所以我有grep-v
。我现在修好了。那么/bin/ls/*ABC*
呢?(我也会从问题中假设grep-v
。@fedorqui:ls*解决方案的问题是,如果存在大量匹配项,它们将失败,因为命令行将变得太长。所以我不会这样做,除非我确定匹配的数量很少。好吧,这是很少见的,但是是的,一般来说:)ls
可能有点风险(请参阅)。是否可以选择使用Zsh而不是Bash?使用Zsh时,命令将是cd*(D[1])
。D
只选择目录,通配符(*)按字母顺序对它们进行排序,[1]
取第一个。@user1934428我知道这些陷阱,通常我会首先避免从脚本进入目录。我可能会结合使用find
、stat
和sort
。然而,OP并没有具体说明他的最终目标是什么,这使得很难猜测更好的解决方案。此外,输出必须根据修改时间(ls-t
)而不是字母顺序进行排序。如果需要根据修改时间将chdir转换为最新的,可以使用zsh使用setopt extendedglob
然后使用cd*(#q/om[-1])
。请参阅zsh手册页中标题为Glob限定符的部分。(为了完整起见:我刚刚注意到我在上一篇评论中犯了一个键入错误。要按字母顺序获取第一个,正确的模式应该是*(/[1])
,而不是*(D[1]))
。/
选择目录,而D
只会打开文件/目录的匹配,其中名称以句点开头。
cd "$(ls -t1 -d ABC_*/ | head -n1)"
cd $(ls -d [^ABC]*/ | head -n 1)