我使用查找目录中的所有文件,所以我得到了一个路径列表。但是,我只需要文件名。例如,我得到。/dir1/dir2/file.txt,我想要得到file.txt


当前回答

如果你的find没有-printf选项,你也可以使用basename:

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

其他回答

我已经找到了一个解决方案(在makandracards页面),这给了最新的文件名:

ls -1tr * | tail -1

(感谢Arne Hartherz)

我用它来写cp:

cp $(ls -1tr * | tail -1) /tmp/

在mac (BSD查找)上使用:

find /dir1 -type f -exec basename {} \;

如果你的find没有-printf选项,你也可以使用basename:

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

如果您只想对文件名运行一些操作,那么使用basename可能会比较困难。

比如这个:

find ~/clang+llvm-3.3/bin/ -type f -exec echo basename {} \; 

只会回显basename /my/found/path。如果我们想在文件名上执行,这不是我们想要的。

但是你可以xargs输出。例如,根据另一个目录下的文件名删除一个目录下的文件:

cd dirIwantToRMin;
find ~/clang+llvm-3.3/bin/ -type f -exec basename {} \; | xargs rm

如果您正在使用GNU查找

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

也可以使用Ruby(1.9+)等编程语言。

$ ruby -e 'Dir["**/*"].each{|x| puts File.basename(x)}'

如果你喜欢bash(至少4个)解决方案

shopt -s globstar
for file in **; do echo ${file##*/}; done