如何创建递归清单目录

如何创建递归清单目录

我需要递归地创建数千个文件及其目录路径的清单。

这是我如何需要清单输出的示例

This_is_an_example/of_how/i_want_to_display/absolute_paths/
examplefiles.md5
examplefiles.txt
examplefile.wav

This_is_an_example/of_how/i_want_to_display/absolute_paths/part_2/
examplefiles.md5
examplefiles.txt
examplefile.wav

该命令tree -fai > manifest.txt让我接近我需要的内容,但它不会在绝对路径之后创建换行符。

其次,我想将子目录中的顺序文件输出为 1 个单行输入

This_is_an_example/of_how/i_want_to_display/absolute_paths/part_3/
test_file_here_0000001.dpx
test_file_here_0000002.dpx
test_file_here_0000003.dpx
test_file_here_0000004.dpx

显示如下

 This_is_an_example/of_how/i_want_to_display/absolute_paths/part_4/
 test_file_here_[0000000-0000004].dpx

答案1

man

  -R, --recursive
          list subdirectories recursively

尝试,

ls -R /path/to/dir

接近一点了,

ll -R /path/to/dir | awk '$1!="total"{print $NF}'

答案2

find . -print | perl -pe 'a=$_; chomp $a; -d $a or s:.*/::'

答案3

既然您想要查找目录然后列出其内容,为什么不使用find它:

find /path/to/dir -type d -exec bash -O dotglob -O nullglob -c '
    for pathname do
        header=0
        for filename in "$pathname"/*; do
            if [ ! -d "$filename" ]; then
                if [ "$header" -eq 0 ]; then
                    printf "%s/\n" "${pathname%/}"
                    header=1
                fi
                printf "%s\n" "${filename##*/}"
            fi
        done
        [ "$header" -eq 1 ] && printf "\n"
    done' bash {} +

这将查找给定目录路径中或给定目录路径下的所有目录。它将所有这些目录的路径名提供给bash脚本。

bash脚本将迭代每个目录,将目录路径名打印为标题并列出该目录中存在的非目录条目。最后,如果在目录中至少找到一个非目录文件,则输出额外的换行符。

不列出空目录或仅包含目录的目录。

对于目录结构,例如

/dir
`-- a
    |-- b
    |   `-- c
    |       |-- .hidden_file
    |       `-- file
    `-- file

这将产生以下输出:

/dir/a/
file

/dir/a/b/c/
.hidden_file
file

相关内容