我需要在目录及其所有子目录中创建文件列表。我已经使用仅列出bash中的目录和子目录中的文件名
find . -type f
获取文件列表,但我只需要文件名,而不是导致它的路径。
因此,而不是返回此:
./temp2/temp3/file3.txt
./temp2/file2.txt
./file.txt
我需要返回
file3.txt
file2.txt
file.txt
我需要在目录及其所有子目录中创建文件列表。我已经使用仅列出bash中的目录和子目录中的文件名
find . -type f
获取文件列表,但我只需要文件名,而不是导致它的路径。
因此,而不是返回此:
./temp2/temp3/file3.txt
./temp2/file2.txt
./file.txt
我需要返回
file3.txt
file2.txt
file.txt
find . -type f -exec basename {} \;
或更好:
find . -type f -printf "%f\n"
find . -type f | xargs basename
命令basename
条的目录和仅输出文件名。使用xargs
链接find
的输出作为basename
的输入。
最后回答:)
-printf "%f"
是最好的解决方案,但printf
只在GNU查找中可用。例如在OS X(和可能的FreeBSD太)将打印:
find: -printf: unknown primary or operator
这种情况下,我更喜欢以下
find . -type f | sed 's:.*/::'
这是更快(在大树下)作为多basename
执行。
缺点是,它只处理文件名中没有\n
(换行符)的文件名。为了处理这种情况,最简单(也是最普遍的 - 但很慢)的方法是使用basename
。
您也可以使用Perl,如:
perl -MFile::Find -E 'find(sub{say if -f},".")'
感谢您的快速反应。他们都工作,所以我随机选择了最好的答案。 – TheRunner565