繁体   English   中英

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

[英]Linux Bash Script: How to get file without 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

但我不想要这个。 我只想显示文件名,而不是路径。
然后我尝试了:

ls -l *.*.*

但是这次只显示我在/ path / to / file /中的文件。
如何设置路径,所以当从任何地方运行脚本时,它会将/ path /中的文件名输出到/ file /?

谢谢!

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。 Switch -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变量将设置为“last”匹配文件名,无论ls返回它们的顺序。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM