使用ls和find在bash脚本中循环遍历文件之间的区别

Fre*_*dar 3 unix bash ls find

我不确定我理解为什么:

for f in `find . -name "strain_flame_00*.dat"`; do
   echo $f
   mybase=`basename $f .dat`
   echo $mybase
done
Run Code Online (Sandbox Code Playgroud)

工作和:

for f in `ls strain_flame_00*.dat`; do
   echo $f
   mybase=`basename $f .dat`
   echo $mybase
done
Run Code Online (Sandbox Code Playgroud)

没有,即文件名不会被删除后缀.我认为这是因为出来的ls格式不同,但我不确定.我甚至试图把它放在evalls面前......

gle*_*man 10

在这里迭代文件名的正确方法是

for f in strain_flame_00*.dat; do
   echo "$f"
   mybase=$(basename "$f" .dat)
   echo "$mybase"
done
Run Code Online (Sandbox Code Playgroud)

使用forglob模式,然后引用对文件名的所有引用是使用可能有空格的文件名的最安全的方法.