linux shell代码,如何选取所有的文件

linux shell代码,如何选取所有的文件,第1张

for file in /data/music/mp3

这个/data/music/mp3,根据展开得到一个文件名集合,forin循环是根据空格来取得集合中的每个元素(文件名)。若文件名本身就含有空格,的确会影响shell的解析。

另外,file本身属于shell命令,不适宜用作变量名,建议换一个变量名称。

换一种按行读取的循环方式:

ls /data/music/mp3 | while read myfile

do

   #这里处理$myfile

done

改为:

/CliqueSearch2 -i "clique_$((i-1))_list100dat" -o "clique_${i}_list100dat" -s $i -w 100

$i -> ${i} ,这种写法更安全,前者在当前条件下产生了歧义,被解析成$i_list了,下面这段代码可以验证:

i_list=333

i=4

echo "clique_$((i-1))_list100dat" 

echo "clique_$i_list100dat" 

echo "clique_${i}_list100dat" 

echo "clique_${i_list}100dat"

两种方法实现:

脚本:

#!/bin/bash

for i in $(seq 30);

do

if [ $i -lt 10 ] ;then

mkdir '0'$i

cp '0'$i '0'$i/

else

mkdir $i

cp $i $i/

fi

done

mkdir 00

cp 00 00/

#end

C语言:

#include<stdioh>

int main()

{ char cmd[64];

int i;

for(i=0;i<30;i++){

sprintf(cmd,"mkdir %02d\n",i);

system(cmd);

}

for(i=0;i<30;i++){

sprintf(cmd,"cp %02d %02d/\n",i);

system(cmd);

}

return 0;

}

for循环在读入的时候是从一个大字符串中进行分割,而分割的标识是IFS,IFS默认分隔符是空格\tab\换行,所以会将换行符和空格同样对待,所以需要更改IFS的分割标志

解决方案:添加代码

OLDIFS=$IFS

IFS=$'\n'

IFS=$OLDIFS123

注意: 这里将IFS的分割标志换成了 $’\n’ 换行符,如果写成’\n’仅仅表示字母n 《Linux就该这么学》一起学习linux

结果: 每一次for循环能够得到正确的文件名,但是在执行mv命令时依然报错,原因是文件名中有空格,不能找到正确的文件

以上就是关于linux shell代码,如何选取所有的文件全部的内容,包括:linux shell代码,如何选取所有的文件、linux bash for循环、linux for 循环问题!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9753205.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存