微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux的Bash脚本:如何获取文件没有path?

我正在尝试在Linux中编写一个非常简单的脚本。

让我先给你看代码

#!/bin/bash # The shell program uses glob constructs and ls # to list all entries in testfiles,that have 2 # or more dots "." in their name. ls -l /path/to/file/*.*.*

当我用bash myscript命令运行这个代码时,我得到如下所示:/path/to/file/file.with.three.dots

但我不想要这个。 我只想显示文件名,而不是path。

然后我试着:

ls -l *.*.*

但这一次是显示我的文件,只有当我在/path/到/文件/。

如何设置path,所以从任何地方运行脚本时,都会输出/ path / to / file /中的文件名。

相当于从GNU到solaris的date

壳与grep,sed,awk在windows

在bash中连接两个stringvariables,添加换行符

什么是bash shell中的'$$'?

为什么execl要求我在运行一个进程后点击“Enter”?

谢谢!

在shell脚本中统计进程

svn status | sorting – 不对输出进行sorting

linux shellstreamredirect直接运行一个命令列表

以列表格式显示服务

用sed或awk,我如何从当前行的末尾回到指定的字符?

basename path/to/file.bc应该给你file.bc

然而,重新阅读这个问题,我认为一个临时的cd路径,然后一个ls可能会更好:

(cd /path/to/file; ls -l *.*.*)

代码优先:

ls -l /path/to/file/*.*.* | awk -F '/' '{print $NF}'

现在解释:你列出你选择的文件,然后在其上使用awk。 开关-F将确定你用于分割的字符(在这种情况下为/)。 然后用awk打印“$ NF”的值,意思是“最后一个”。 所以你有:/path/to/file/file.with.three.dots。 分割它,取最后一个(file.with.three.dots)并打印出来(无论你的路径有多长/多深),而不需要改变你在文件系统上的当前位置。

我真的希望,我已经帮助了。

或者使用find命令。

$> find /path/to/file -printf %f\n\r

我建议坚持basename。

ls -1 /path/to/file/*.*.* | while read path do basename "$path" done

它最好是在读取时使用,而不是在$(ls / path / )*中的路径,因为如果你的路径碰巧有一个空间,for循环会分割路径。

我使用了Zapatero技术的变体来捕获环境变量中的基本文件名。 $1是命令行参数,根据我的脚本中的定义,是所讨论的文件名的完整路径。

请注意,如果完整路径包含通配符并返回多个结果,则basename变量将按照ls返回的顺序设置为“last”匹配文件名。

basename=$(ls -1 "$1" | while read path; do basename "$path"; done)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐