我需要在目录及其所有子目录中创建文件列表。我用过
find . -type f
获取文件列表,但我只需要文件名,而不是通向它的路径。
所以不要回复:
./temp2/temp3/file3.txt
./temp2/file2.txt
./file.txt
我需要返回
file3.txt
file2.txt
file.txt
答案 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
使用-execdir
和printf
:
find . -type f -execdir printf "%s\n" {} +
答案 2 :(得分:1)
constant
命令find . -type f | xargs basename
剥离目录并仅输出文件名。使用basename
将xargs
的输出链接为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},".")'