[英]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.