分页: 1 / 2

shell 循环 处理带空格的文件

发表于 : 2012-12-19 22:19
kimonao
本来想实现一个 将 文件 后缀CUE 改成 cue的功能, 结果却各种报错。
因为文件夹是有很多空格的 所以,,,

本小白初学者 求大神指点: 下面是问题脚本

#!/bin/bash
allname= "find ./ -type f | grep CUE"
for name in $(find ./ -type f | grep CUE)
do
mv "$name" "${name%.CUE}".cue
done

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-19 22:31
枫叶饭团
改IFS

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 12:47
sunfish
rename 's/.CUE$/.cue/' *

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 14:53
kimonao
枫叶饭团 写了:改IFS
怎么该呀 = = IFS 是神马? =o =*

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 15:03
kimonao
sunfish 写了:rename 's/.CUE$/.cue/' *
结果 出现了 死循环。 执行无反应 = =

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 16:07
sunfish
先看看你的rename是不是perl版本的,c版本的你查一下用法,man看

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 16:48
kimonao
sunfish 写了:先看看你的rename是不是perl版本的,c版本的你查一下用法,man看
perl版的
话说 问题主要是 无法解决 路径含有空格的问题

跪求 完整答案 T——T

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 17:34
sunfish
我测试了,带空格没问题,不知道你的目录的文件啥情况

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 20:47
kimonao
sunfish 写了:我测试了,带空格没问题,不知道你的目录的文件啥情况
你的那个方法可以处理文件夹下的文件, 可是文件夹里面的 带空格的文件夹名的文件夹里面的文件(就是当前目录下 还有一个带空格名的文件夹) 就不起作用了

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 21:34
cao627

代码: 全选

$ find ./ -type f | grep cue
./test.cue
./a a/tt.cue

如上find找到的其实是两个文件,但用for循环付给变量的是三个值 ./test.cue ./a 和 a/tt.cue
以下mv命令将这三个值作为文件操作,于是就会应为找不到后两个文件而出错。

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-20 23:59
kimonao
cao627 写了:

代码: 全选

$ find ./ -type f | grep cue
./test.cue
./a a/tt.cue

如上find找到的其实是两个文件,但用for循环付给变量的是三个值 ./test.cue ./a 和 a/tt.cue
以下mv命令将这三个值作为文件操作,于是就会应为找不到后两个文件而出错。
恩 确实是这样啊, 报的一堆错误也都是这样,求大神解决办法啊!!

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-21 8:49
mjp123
sunfish 写了:rename 's/.CUE$/.cue/' *
正解,只此一句。

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-21 8:59
kimonao
mjp123 写了:
sunfish 写了:rename 's/.CUE$/.cue/' *
正解,只此一句。
文件夹下 还有文件夹的。 不是只有文件的

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-21 10:00
bones7456

代码: 全选

find ./ -type f -name "*.CUE" | while read name;do mv "$name" "${name%.CUE}".cue;done

Re: shell 循环 处理带空格的文件

发表于 : 2012-12-21 10:51
kimonao
bones7456 写了:

代码: 全选

find ./ -type f -name "*.CUE" | while read name;do mv "$name" "${name%.CUE}".cue;done
跪谢大神! 已终结~ >_<~