Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何将自定义路径添加到“";ls-d*/“的;_Bash_Shell_Sorting_Cut_Ls - Fatal编程技术网

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)