我需要递归地创建数千个文件及其目录路径的清单。
这是我如何需要清单输出的示例
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