Bash 如何将自定义路径添加到“";ls-d*/“的;
问题:代码运行良好,它以相反的顺序列出带有“数字名称”的文件夹,但是我必须在同一个目录中。我想给它添加一个自定义路径,这样我就不必在同一个目录中Bash 如何将自定义路径添加到“";ls-d*/“的;,bash,shell,sorting,cut,ls,Bash,Shell,Sorting,Cut,Ls,问题:代码运行良好,它以相反的顺序列出带有“数字名称”的文件夹,但是我必须在同一个目录中。我想给它添加一个自定义路径,这样我就不必在同一个目录中 ls -d */ | cut -d '/' -f 1 | sort -nr 我尝试将“/test/path”添加到上面的代码中,但没有成功 ls -d */ /test/path/ | cut -d '/' -f 1 | sort -nr 更新:我不知道为什么在这个场景的底部会打印“test2”。我使用的是slitazlinux5.0我无法理解
ls -d */ | cut -d '/' -f 1 | sort -nr
我尝试将“/test/path
”添加到上面的代码中,但没有成功
ls -d */ /test/path/ | cut -d '/' -f 1 | sort -nr
更新:我不知道为什么在这个场景的底部会打印“test2”。我使用的是slitazlinux5.0
我无法理解shell
版本
root@s1:/# mkdir /test
root@s1:/# mkdir /test/test2
root@s1:/# cd /test/test2/
root@s1:/test/test2# mkdir 1 2 3 10
root@s1:/test/test2# touch test.txt
root@s1:/test/test2# ls -d /test/test2/*/ | awk -F'/' '{print $(NF-1)}' | sort -nr
10
3
2
1
test2
root@s1:/test/test2#
更新2:
在我使用“Alpine Linux”版本“3”的云服务器上,我相信似乎没有问题,代码运行正常
test:/# mkdir /test
test:/# mkdir /test/test2
test:/# cd /test/test2
test:/test/test2# mkdir 1 2 3 10
test:/test/test2# touch test.txt
test:/test/test2# ls -d /test/test2/*/ | awk -F'/' '{print $(NF-1)}' | sort -nr
10
3
2
1
test:/test/test2#
尽管cut
无法按您想要的方式使用它
相反,请使用以下命令:
ls -d /test/path/*/ | awk -F'/' '{print $(NF-1)}' | sort -nr
另外,为了避免nullglob,请在以下操作之前设置此选项:
shopt -s nullglob
这样,如果不存在目录,就不会导致错误
我不确定上述命令在SliTaz Linux 5.0
上不起作用的原因,但如前所述,可以这样做:
cd /test/path/ ; ls -d */ | awk -F'/' '{print $(NF-1)}' | sort -nr ; cd "$OLDPWD"
或
这一个还在末尾打印“
test2
”。“test2”文件夹中没有“test2”ls-d/test/test2/*/|awk-F'/'{print$(NF-1)}sort-nr
@SümerKolçak,不能复制,你使用什么shell版本?还有ls-d/test/test2/*/
的输出是什么,你能在你的问题中更新吗?我已经更新了这个问题。ls-d/test/test2/*/
的输出是:/test/test2/1//test/test2/2//test/test2/test.txt/test/test2/10//test/test2/3/
我选择您的答案作为“选择的答案”,因为您的代码正在使用“Alpine Linux”的云服务器上工作。因此,也许你的代码在其他地方也能工作,也许问题在于我的家用计算机使用“Slitaz Linux 5”,我在问题中添加了“Update 2”,以表明代码在“Alpine Linux”上工作,ls-d/test/test2/*/|awk 1
在有问题的机器上产生了什么?可接受的答案应便于携带;我推测你的目录树包含的内容比你透露的要多。@tripleee,这一切看起来都很正常/test/test2/1//test/test2/10//test/test2/2//test/test2/3//test/test2/test.txt
也许为了便于移植,我可以使用“test=$(cd/test/test2/;ls-d*/|awk-F'/”{print$(NF-1)}排序-nr)
”和echo$test
但可能缺少新行
@SümerKolçak,我想test.txt
不是dir?键入ls-d/test/test2/*/
时不应打印它。我搜索了net,它说你的机器有ash
作为默认shell。我不知道你是如何在ash
@Mihir中做到这一点的,我只是注意到,你是对的@tripleee,我收回,似乎有问题,它将文件列为文件夹。在使用Alpine Linux的云服务器上不会发生这种情况:ls-d/test/test2/*/
/test/test2/1//test/test2/10//test/test2/2//test/test2/3/
尽管我的Alpine有Busybox,但我无法重新说明:
cd /test/path/ ; ls -d */ | awk -F'/' '{print $(NF-1)}' | sort -nr ; cd "$OLDPWD"
(cd /test/path/ ; ls -d */ | awk -F'/' '{print $(NF-1)}' | sort -nr)