ShellScript – 帮助我列出文件和子目录

我想知道如何以这种格式列出一个目录。 正常列表结构:

#find . -follow -type f | sed "s/.//" /files/test1/test2/file1.txt /files/test1/test2/file2.txt /files/test1/test2/file3.txt /files/test1/file1.txt /files/test1/file2.txt /files/test1/file3.txt /files/file1.txt /files/file2.txt /files/file3.txt /file1.txt /file2.txt /file3.txt 

我想我会列出如下:

 /files/test1/test2/file1.txt file2.txt file3.txt /files/test1/file1.txt file2.txt file3.txt /files/file1.txt file2.txt file3.txt /file1.txt file2.txt file3.txt 

喜欢这个:

  ls -R1 | sed -e 's/://' -e 's/.//' 

但是会喜欢上面解释的结构!

 ... | while read path; do dir=$(dirname "$path") if [[ $dir = $prev ]]; then echo $(basename "$path") else echo $path prev=$dir fi done 

有趣的测验!

安装示例dirs和文件

mkdir -p files/test1/test2 && for P in . files files/test1 files/test1/test2; do touch "$P"/file{1,2,3}.txt; done

作为一个班轮,尝试

find . -type d | sort -r | while read P; do printf "${P#.*}"/; ls -v | while read F; do echo ${F##*/}; done; done

输出就像你的要求

 /files/test1/test2/file1.txt file2.txt file3.txt /files/test1/file1.txt file2.txt file3.txt /files/file1.txt file2.txt file3.txt /file1.txt file2.txt file3.txt 

解决这个很多乐趣。