仅列出bash中目录和子目录中的文件名

时间:2016-03-14 18:50:20

标签: bash

我需要在目录及其所有子目录中创建文件列表。我用过

find . -type f

获取文件列表,但我只需要文件名,而不是通向它的路径。

所以不要回复:

./temp2/temp3/file3.txt
./temp2/file2.txt
./file.txt

我需要返回

file3.txt
file2.txt
file.txt

4 个答案:

答案 0 :(得分:2)

find . -type f -exec basename {} \;

或更好:

find . -type f -printf "%f\n"

答案 1 :(得分:2)

您可以在gnu printf中使用find选项:

find . -type f -printf "%f\n"

对于非gnu find使用-execdirprintf

find . -type f -execdir printf "%s\n" {} +

答案 2 :(得分:1)

constant

命令find . -type f | xargs basename 剥离目录并仅输出文件名。使用basenamexargs的输出链接为find的输入。

答案 3 :(得分:0)

迟到的回答:)

-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},".")'