您的位置:首页 > 运维架构 > Shell

mv遇到空格和小括号文件引发的问题

2016-08-21 12:38 387 查看
最近整理一些文件遇到一件很纠心的事情,用了很多的方法,但均未成功将文件名中包含空格和括号的文件整理成功。问题如下:

在所要整理的文件夹中包含多个子文件夹而每个文件夹下面都有恼人的文件包含空格和小括号:

比如在当前Documents目录下有大致500多份文件其中百分之80是以abc (0).log或abcdef  ( 2 ).log,同时子目录也有可能是是/aa  bb/或/aaa bbb ccc/这类的,通过shell脚本来实现时,一旦到了含空格文件名的时候全部卡壳或是执行失败,用过sed, awk, rename可是到了mv $file $dest_fn的时候要么文件全部被mv到 /dev/null 或被重命名为(null).log这里用(null)表示文件名全部给删除了,要么就是文件是什么样子还是什么样子。代码块如下:

复制内容到剪贴板

代码:

#!/bin/bash# This is a test sample script

for i in `ls -iR|grep -E "[A-Za-z0-9]*.log|awk '{print $1}'`

do

name=`find . -inum $i"|awk -F '/' '{print $NF}`

stu_fn=$(echo $name|tr -d ' ', '\(', '\)')

mv "./$name" "./$stu_fn"

done

这里我把$path用当前文件夹所在位置代替了。

原先用过

复制内容到剪贴板

代码:

ls -iR|awk '{gsub(/[\(\)]/,"",$3);print "find . -inum " ,$1, "-exec mv {}",$2,$3,"\;"}'

提示line1 mv >>>错误

然后我把最后的$2删除,问题也同样是提示line1 mv >>>错误

通过不断的完善,终于完美解决这个问题。以下是代码块:

复制内容到剪贴板

代码:

#!/bin/sh

#  sample.sh

#  

find . -name "* (*)*"|while read name;do

s_fn=$(echo $name|tr -d ' ','\(','\)');

mv "$name" $s_fn;

done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell mv命令