如果我使用for循环迭代目录,如何仅回显文件的文件名?
for filename in /home/user/*
do
echo $filename
done;
Run Code Online (Sandbox Code Playgroud)
将使用文件名拉出完整路径.我只想要文件名.
Sie*_*geX 144
如果您想要原生bash解决方案
for file in /home/user/*; do
echo "${file##*/}"
done
Run Code Online (Sandbox Code Playgroud)
以上使用参数扩展,它是shell的原生,不需要调用外部二进制文件,如basename
但是,我可以建议使用 find
find /home/user -type f -printf "%f\n"
Run Code Online (Sandbox Code Playgroud)
Sea*_*ght 44
只需使用basename:
echo `basename "$filename"`
Run Code Online (Sandbox Code Playgroud)
如果$ filename包含例如空格,则需要引号.
另一种方法是ls在读取目录中的文件列表时使用,以提供所需的内容,即“仅文件名”。与读取完整文件路径然后在for循环的主体中提取“文件名”组件相反。
以下是原始示例的示例:
for filename in $(ls /home/user/)
do
echo $filename
done;
Run Code Online (Sandbox Code Playgroud)
如果您在与文件相同的目录中运行脚本,那么它将变成:
for filename in $(ls)
do
echo $filename
done;
Run Code Online (Sandbox Code Playgroud)