对于目录中的文件,只有 echo 文件名(没有路径)

如果使用 for 循环迭代目录,那么如何只回显文件的文件名?

for filename in /home/user/*
do
echo $filename
done;

will pull the full path with the file name. I just want the file name.

226334 次浏览

如果需要本机 bash解决方案

for file in /home/user/*; do
echo "${file##*/}"
done

上面使用的 参数展开是 shell 本机的,不需要调用外部二进制文件(如 basename)

但是,我可以建议只使用 find

find /home/user -type f -printf "%f\n"

使用 basename:

echo `basename "$filename"`

如果 $filename 包含例如空格,则需要引号。

使用 basename:

echo $(basename /foo/bar/stuff)

另一种方法是在读取目录中的文件列表时使用 ls,以便得到您想要的结果,即“只是文件名/s”。与读取完整的文件路径然后在 for 循环的主体中提取“ file name”组件相反。

下面的例子跟随你的原文:

for filename in $(ls /home/user/)
do
echo $filename
done;

If you are running the script in the same directory as the files, then it simply becomes:

for filename in $(ls)
do
echo $filename
done;

如果你只想要文件名:

for file in /home/user/*; do
f=$(echo "${file##*/}");
filename=$(echo $f| cut  -d'.' -f 1); #file has extension, it return only filename
echo $filename
done

for more information about cut command see here.

你可以使用 SiegeX 上面说的,或者如果你对学习/使用参数展开不感兴趣,你可以使用:

for filename in $(ls /home/user/);
do
echo $filename
done;