我使用查找目录中的所有文件,所以我得到了一个路径列表。但是,我只需要文件名。例如,我得到。/dir1/dir2/file.txt,我想要得到file.txt
当前回答
在mac (BSD查找)上使用:
find /dir1 -type f -exec basename {} \;
其他回答
如果你的find没有-printf选项,你也可以使用basename:
find ./dir1 -type f -exec basename {} \;
如果您正在使用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
使用-execdir自动保存当前文件{},例如:
find . -type f -execdir echo '{}' ';'
您也可以使用$PWD代替。(在某些系统上,它不会在前面产生一个额外的点)。
如果你仍然有一个额外的点,或者你可以运行:
find . -type f -execdir basename '{}' ';'
-execdir utility[参数…]]; -execdir primary与-exec primary相同,不同之处在于实用程序将从包含当前文件的目录执行。
当使用+而不是;时,对于每次实用程序调用,{}将被替换为尽可能多的路径名。换句话说,它将在一行中打印所有文件名。
我已经找到了一个解决方案(在makandracards页面),这给了最新的文件名:
ls -1tr * | tail -1
(感谢Arne Hartherz)
我用它来写cp:
cp $(ls -1tr * | tail -1) /tmp/
在GNU中,你可以使用-printf参数,例如:
find /dir1 -type f -printf "%f\n"
推荐文章
- 在Bash中检查变量是否存在于列表中
- 查看PS命令的全部输出
- 确保一次只运行一个shell脚本实例的快速方法
- Linux命令将域名转换为IP
- 如何从命令行在windows中找到mysql数据目录
- 如何在Makefile中设置子进程的环境变量
- 如何让“wc -l”打印没有文件名的行数?
- 有效地测试Linux上的端口是否打开?
- 如何从另一个文件A中删除文件B中出现的行?
- 对以制表符分隔的文件进行排序
- Shell脚本删除超过n天的目录
- 使用sudo时未找到命令
- 当有命令行参数时,如何使用GDB分析程序的核心转储文件?
- 如何检查shell脚本中是否存在命令?
- 如何使用查找命令从列表中查找所有具有扩展名的文件?