![获取子目录下的所有文件名](https://linux22.com/image/105791/%E8%8E%B7%E5%8F%96%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%90%8D.png)
我需要从子目录中获取所有文件名,不包括路径,例如file1
正确的和./folder/file1
不正确的。我的用例是检索位于/usr/share/terminfo
目录内的所有可用 terminfo 文件名。但它们位于另一组子目录内,如下所示 -
terminfo ア ls
1 3 5 7 9 A c e f h j l m n o P Q s u w X
2 4 6 8 a b d E g i k L M N p q r t v x z
terminfo ア cd 1
1 ア ls
1178 1730-lm
您可以看到文件位于这些目录1
3
或A
子目录内,我需要每个子目录中的所有文件名。总共有42 directories, 2720 files
这么多手动过程会很累人。
答案1
find /usr/share/terminfo -type f -exec basename {} \;
答案2
因为我们知道我们想要的文件名称是 下的两个级别/usr/share/terminfo
,并且其下没有其他目录,所以这将是一个快速解决方案(仅执行find
一次cut
):
$ find /usr/share/terminfo -type f | cut -d '/' -f 6
或者,用一个稍微“重”sed
的替换:
$ find /usr/share/terminfo -type f | sed 's#^.*/##'
替换会删除中每行输出的sed
最后一行(包括最后一行)之前的所有内容。/
find
答案3
1 使用树
(详细信息为人树)
tree -i /usr/shar/terminfo
或者如果你想删除目录:
tree -iF /usr/shar/terminfo | grep -v /
2 使用LS
ls -R /usr/share/terminfo | grep -v /
ls /usr/share/terminfo/*/* | grep -o '[^/]*$'
basename -a $(ls /usr/share/terminfo/*/*)